2017-12-19 1 views
0

Hallo Ich weiß, viele von Ihnen bereits wissen, wie es aber bitte helfen Sie mir getan werden kann, wie ich ein Anfänger zu schnelle Programmierung bin.Was ist der beste Weg, um einen [UInt8] Byte-Array in schnellen 4 zu ändern?

Bitte diesen Code betrachten und mir helfen, mit Änderungen,

// Meine gelesenen Code

let ReceiveData = rxCharacteristic?.value 
     if let ReceiveData = ReceiveData { 
      let ReceivedNoOfBytes = ReceiveData.count 
      myByteArray = [UInt8](repeating: 0, count: ReceivedNoOfBytes) 
      (ReceiveData as NSData).getBytes(&myByteArray, length: ReceivedNoOfBytes) 
      print("Data Received ",myByteArray) 
       } 

// Nun, sie in einigen lokalen Variablen, wie ich bin Speichern unter

let b0 = myByteArray[0] 
let b0 = myByteArray[1] 
let b2 = myByteArray[2] 
let b3 = myByteArray[3] 

// Jetzt möchte ich einige Daten einfügen, die aus einer Textbox kommenden

var tb1 = textbox1.text 
var b1 = tb1.flatMap{UInt8(String($0))} 

var tb2 = textbox2.text 
var b2 = tb2.flatMap{UInt8(String($0))} 

// Jetzt schreibe ich alle Daten, die einen Funktionsblock wie unter

let Transmitdata = NSData(bytes: bytes, length: bytes.count) 
       peripheral.writeValue(Transmitdata as Data, for: txCharacteristic!, type: CBCharacteristicWriteType.withoutResponse) 
       print("Data Sent",Transmitdata) 

Hier ein neues Byte-Array unter Klassendeklaration zur Zeit der Erstellung und Zuordnung des empfangenen Byte-Array Ich verwenden. Wie unten

class Example:UIViwecontroller{ 

var storebytes: [UInt8]() 


func somefunc(){ 

storebytes = myByteArray 

} 

Und dann versuchen, meine Textbox Daten an der Stelle der ersten beiden Positionen in myByteArray Swapping und es dann zu Sendedaten übergeben.

Gibt es eine einfache Möglichkeit, es zu tun? Fügen Sie einfach Bytes an den Stellen ein, die ich brauche, und geben Sie sie an den Sender weiter?

Ich habe versucht, eine Methode wie

bytes.insert(new data,at: index) 

aber es gibt mir einen Index außerhalb des Bereichs verwendet wird. Kennt jemand eine bessere Methode, wie man es macht?

Antwort

2

In Swift 3+ kann Data als Sammlertyp verwendet werden, der UInt8 Objekte enthält.

Mit einem Data Objekt aus einem String

let hello = Data("hello".utf8) 

Sie es [UInt8] umwandeln kann einfach mit

let hello1 = [UInt8](hello) 

und zurück zu Data

let hello2 = Data(hello1) 

Data bietet alle manipulati auf API wie append, insert, remove


Eigentlich brauchen Sie nicht [UInt8].Gegeben seien zwei Strings als Data Objekte

var hello = Data("Hello !".utf8) 
let world = Data("world".utf8) 

Sie world in hello einfügen

hello.insert(contentsOf: world, at: 6) 
print(String(data: hello, encoding: .utf8)!) // "Hello world!" 

Und dann eine Reihe von Daten

let rangeOfWorld = Data(hello[6...11]) 
print(String(data: rangeOfWorld, encoding: .utf8)!) // "world!" 
+0

hallo Vadian, vielen Dank für Ihre Antwort. Ich bin ein wenig verwirrt Kannst du es in meinem Code wie oben zeigen, wie Sammlungsart durchgeführt werden kann? :) – nar0909

+0

Was soll 'tb1.flatMap {UInt8 (String ($ 0)') tun? – vadian

+0

Hallo danke ich habe es bekommen :) naja textbox.text gibt einen String zurück der sagt "12" aber ich muss es umwandeln zu zwei UInt8 Nummern, wenn ich die obige Flatmap verwende, bekomme ich [1,2] und es ist ein UInt8. Hoffe das hilft – nar0909

Verwandte Themen