>

베타 3에 있습니다. 다음 Objective-C 라인을 고려하십시오.

const uint8_t *reportData = [data bytes];

여기서 data   NSData 입니다  개체.

이 줄은 어떻게 Swift에서 다시 작성됩니까?

data.bytes   ConstUnsafePointer<()> 유형입니다 Swift에서 포인터 유형을 만드는 방법에 대한 많은 문서가 있지만이를 사용하는 방법에 대한 정보는 많지 않습니다.

수정 : 컨텍스트를 추가하기 위해 Apple의 HeartRateMonitor 샘플 코드를 Swift로 이식하려고합니다. 이 코드는 BLE 심박수 모니터와 상호 작용합니다. 내가 작업중인이 코드는 블루투스 시스템이 수신 한 데이터를 UI에서 사용하기 위해 int로 변환합니다. BT에서 수신 한 데이터는 uint의 배열이어야하며 요소 0은 플래그를 확인하는 데 사용되고 요소 1은 값을 포함합니다.

다음은 동일한 Objective-C 라인입니다 :

const uint8_t *reportData = [data bytes];
uint16_t bpm = 0;
if ((reportData[0] & 0x01) == 0) 
{
    /* uint8 bpm */
    bpm = reportData[1];
}

  • 답변 # 1

    당신이 찾고 있던 것은 NSData를 UInt8의 배열로 변환하는 방법이었습니다. 방법은 다음과 같습니다.

    import Foundation
    let path = "/etc/csh.cshrc" // something existent
    let data = NSData(contentsOfFile: path)
    var aofb = [UInt8](count:data.length, repeatedValue:0)
    data.getBytes(&aofb, length:data.length)
    for c in aofb {
        let s = UnicodeScalar(Int(c)).escape(asASCII:true)
        println("\(c):\(s)")
    }
    
    

  • 답변 # 2

    다음 코드 만 작성하십시오 (아래 코드는Beta 3에서 작동하며ConstUnsafePointer<()>COpaquePointer베타 2에서 작업하려면 자세한 내용은 편집 기록을 참조하십시오)

    var dataPath = NSBundle.mainBundle().pathForResource("TestData", ofType: "") // What I have in TestData is "GREETINGS WORLD"
    var originalData = NSData(contentsOfFile: dataPath)
    var dataLength = originalData.length
    println("original data: \(originalData)") // Output original data
    // Data to bytes
    var reportBytes: ConstUnsafePointer<()> = originalData.bytes
    var bytesToString = NSString(bytes: reportBytes, length: dataLength, encoding: NSUTF8StringEncoding)
    println("string from bytes: \(bytesToString)")
    // Bytes to data
    var bytesToData = NSData(bytes: reportBytes, length: dataLength)
    println("data from bytes: \(bytesToData)")
    
    

    콘솔 로그

    original data: <47524545 54494e47 5320574f 524c44>
    string from bytes: GREETINGS WORLD
    data from bytes: <47524545 54494e47 5320574f 524c44>
    
    

    도 도움이 될 것입니다

    ConstUnsafePointer<T>
    /// This type stores a pointer to an object of type T. It provides no
    /// automated memory management, and therefore the user must take care
    /// to allocate and free memory appropriately.
    
    

    이 빛을 비추 길 바란다.

  • 답변 # 3

    Swift에서 블루투스 심박수 모니터를 살펴보면 NSData 바이트 값을 UInt8 형식으로 가져 오는 가장 간단한 방법을 찾았다.

    let bytes = UnsafePointer<UInt8>(data.bytes)
    if bytes[0] & 0x01 == 0 {
        NSLog("BPM \(bytes[1]")
    }
    
    

  • 이전 xcode5 - Xcode 5의 xib에서 현지화 문자열 파일이 작동하지 않음
  • 다음 caching - doctrine 2 cache - repository :: find * ()와 함께 캐시를 사용할 수 있습니까?