2017-12-19 4 views
0

こんにちは私はあなたの多くがすでにそれを行うことができます知っているが、私は迅速なプログラミングの初心者ですように私を助けてください。swift 4の[UInt8]バイト配列を変更する最良の方法は何ですか?

今、私は

let b0 = myByteArray[0] 
let b0 = myByteArray[1] 
let b2 = myByteArray[2] 
let b3 = myByteArray[3] 
以下のようないくつかのローカル変数にそれらを格納しています//

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) 
       } 

マイ読み取ったコード//このコードを検討し、変更で私を助けて、

してください

// Textboxからのデータを挿入したい場合

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

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

//今、私は

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

以下ここで私は現在、クラス宣言の下に新しいバイト配列を作成し、受信したバイト配列を割り当てるてるような機能ブロックを使用して、すべてのデータを書いています。その後、

以下
class Example:UIViwecontroller{ 

var storebytes: [UInt8]() 


func somefunc(){ 

storebytes = myByteArray 

} 

などmyByteArrayの最初の2つの位置の代わりに私のテキストボックスのデータを交換してみてください、その後transmitdataにそれを渡します。

これを行う簡単な方法はありますか?私は必要な場所にバイトを挿入するだけで、それを送信に渡しますか?

私は

bytes.insert(new data,at: index) 

のようないくつかの方法を使用して試してみましたが、それは範囲外の私にインデックスを提供します。誰かがより良い方法を知っていますか?

答えて

2

スウィフト3+ Dataでは、UInt8オブジェクトを含むコレクションタイプとして使用できます。あなたは、単に

let hello1 = [UInt8](hello) 

とバックData

let hello2 = Data(hello1) 

Dataへのすべてのmanipulatiを提供して[UInt8]に変換することができますString

let hello = Data("hello".utf8) 

からDataオブジェクトを持つ

appendinsertremove


などのAPIに実際にあなたは[UInt8]は必要ありません。Dataオブジェクト

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

として二つの文字列を考えるとあなたはhello

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

worldを挿入し、データ

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

こんにちはヴァディアン、ご回答に感謝の範囲を得ることができます。私はちょっと混乱しているのですが、上記のように自分のコードにコレクションタイプを実行する方法を表示できますか? :) – nar0909

+0

'tb1.flatMap {UInt8(String($ 0)'}は何をやっているのですか? – vadian

+0

こんにちは、私はそれを持っています:)よくtextbox.textは "12"と言う文字列を返しますが、私は上記のフラットマップを使用すると、私は[1,2]とそのUInt8を得るので、2つのUInt8番号に。希望は – nar0909

関連する問題