2016-10-18 2 views
2

Я знаю, что этот вопрос задавали несколько раз, но я действительно этого не понимаю.UnsafePointer in Swift 3

Я хочу извлечь значение с устройства bluetooth (miband). В быстром 2 она работала так:

Но в быстром 3 он выдает ошибку:

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

И я понятия не имею, как мигрировать, что быстрое 3.

ответ

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

I f UnsafePointer указывал на массив Pointee, тогда вы могли бы использовать оператор индекса, например. pointer[0], pointer[1], и т.п., а не pointer.pointee.

Для получения дополнительной информации см. SE-0107.

+0

Работает отлично. Благодарю. – Patricks