![](/img/trans.png)
[英]How to set the name of BLE peripheral in iOS using Core Bluetooth
[英]Swift 3, unwrapping peripheral name (Bluetooth BLE)
我正在使用Swift 3 / X-Code開發iOS應用。 此應用程序需要藍牙通信,我已經閱讀了一些教程和有關使其工作的內容。 到目前為止(UI方面)一切正常。 但是我遇到以下問題,因為我閱讀的大多數教程都沒有更新到Swift 3,所以我相信這可能是這里的問題:
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
//What to do when it discovers a peripheral, add it to the array list
//print("Adding peripherals found to array: " + peripheral.name!)
//peripheralsFound.append(peripheral.name!)
print("Peripheral found!")
}
上面的代碼注釋掉了幾行,我希望將外圍設備添加到數組中,但是如果我取消注釋與peripheral.name相關的任何行! 在此應用程序崩潰,並顯示錯誤“在展開可選值時意外找到nil”
我相信這與peripheral.name有關! 這是由X代碼本身修復的(它添加了!或否則將無法編譯),我顯然無法將外圍設備.name設為可選,否則應用程序將無法編譯,並且我不知道是否還有其他方法為了找到外設的名稱,我將不勝感激。 謝謝!
您可以使用??向打印語句添加默認值。 “......”
print("Adding peripherals found to array: " + (peripheral.name ?? "name was nil"))
這將使您不必強制執行此操作,也可以通過if進行簡單檢查
if let unwrappedName = peripheral.name {
print("Adding peripherals found to array: " + unwrappedName)
}
我建議您閱讀有關可選的內容以及它們如何工作的信息,這樣您就不必依靠IDE來為您做所有更正。
使用可選綁定安全地展開可選值。
var peripheralNames = [String]()
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let name = peripheral.name {
peripheralNames.append(name)
print("Adding peripheral found to array: " + name)
}
print("Peripheral found!")
}
斯威夫特3:嘗試一下
var arrayPeripheral: [CBPeripheral] = []
var arrayPeripheralStringName:[String] = []
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber){
let peripheralLocalName_advertisement = ((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) as? String
if (((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) != nil){
if !(self.arrayPeripheral.contains(peripheral)){
self.arrayPeripheral.append(peripheral)
self.arrayPeripheralStringName.append(peripehral.name)
peripheral.delegate = self
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.