簡體   English   中英

Swift 3,展開外設名稱(藍牙BLE)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM