2017-12-19 6 views
0

안녕하세요. 많은 분들이 이미 어떻게 할 수 있는지 알고 있지만 제발 빨리 도와주세요. 프로그래밍 초급자입니다.신속한 4에서 [UInt8] 바이트 배열을 수정하는 가장 좋은 방법은 무엇입니까?

,이 코드를 고려하고 변화 제발 도와주세요

// 내 읽기 코드

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

// 지금처럼 일부 지역 변수로 저장하고있어 아래

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

// 이제 Textbox에서 가져온 일부 데이터를 삽입하려고합니다.

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

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

// 이제 여기

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

이하 I 현재 클래스 선언 하에서 새로운 바이트 배열을 생성하고, 상기 수신 바이트 배열을 할당하는 것 같은 기능 블록을 사용하는 모든 데이터를 기록하고있다. 다음

아래
class Example:UIViwecontroller{ 

var storebytes: [UInt8]() 


func somefunc(){ 

storebytes = myByteArray 

} 

와 마찬가지로 myByteArray의 처음 두 위치의 장소에 내 텍스트 상자 데이터를 교환하려고하고 transmitdata에 전달합니다.

간단한 방법이 있습니까? 필요한 장소에 바이트를 삽입 한 다음 전송에 전달합니다.

나는

bytes.insert(new data,at: index) 

같은 몇 가지 방법을 사용하여 시도했지만이 범위를 벗어 나에게 인덱스를 제공합니다. 누군가 그것을하는 더 나은 방법을 알고 있는가?

답변

2

스위프트 3+ Data에서는 UInt8 개체가 포함 된 컬렉션 유형으로 사용할 수 있습니다.

당신이 Data

let hello2 = Data(hello1) 

Data 다시 간단하게

let hello1 = [UInt8](hello) 

[UInt8]로 변환 할 수있는 String

let hello = Data("hello".utf8) 

에서 Data 객체를 갖는 것은 모든 manipulati을 제공합니다 API와 같은 append, insert


remove 사실 당신은 [UInt8] 필요하지 않습니다.Data로 두 문자열을 감안할 때 당신은 당신의 응답 데이터

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

안녕 vadian, 감사의 범위를 hello

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

world를 삽입 한 다음 얻을 수

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

객체. 나는 약간 혼동 스럽다. 위와 같이 콜렉션 유형을 수행 할 수있는 방법을 내 코드에 표시 할 수 있습니까? :) – nar0909

+0

무엇이'tb1.flatMap {UInt8 (String ($ 0)'}해야할까요? – vadian

+0

안녕하세요. 감사합니다. :) textbox.text는 "12"라고 말하는 문자열을 반환하지만 변환해야합니다. 두 UInt8 숫자 그래서 내가 위의 플랫 맵을 사용할 때 나는 [1,2]와 UInt8을 얻는다. 희망은 도움이 – nar0909