2

この質問が何度か聞かれたことは知っていますが、本当に理解できません。

Bluetooth デバイス (miband) から値を抽出したい。Swift 2では、次のように機能しました:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    if characteristic.uuid.uuidString == "FF06" {
        let value = UnsafePointer<Int>(characteristic.value!.bytes).memory
        print("Steps: \(value)")
    }
}

しかし、Swift 3 ではエラーがスローされます。

Cannot invoke initializer for type 'UnsafePointer<Int>' with an argument list of type '(UnsafeRawPointer)'

そして、それをSwift 3に移行する方法がわかりません。

4

1 に答える 1

2

withUnsafeBytesで使用できますpointee

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    if characteristic.uuid.uuidString == "FF06" {
        let value = characteristic.value!.withUnsafeBytes { (pointer: UnsafePointer<Int>) -> Int in
            return pointer.pointee
        }
        print("Steps: \(value)")
    }
}

UnsafePointerが の配列を指している場合は、 の代わりに , などのPointee添字演算子を使用できます。pointer[0]pointer[1]pointer.pointee

詳細については、SE-0107を参照してください。

于 2016-10-18T15:25:58.227 に答える