2017-10-04 102 views
0

我學習藍牙核心框架,我做了一個測試項目有關它的學習:藍牙核心斯威夫特獲得設備名稱

class ViewController: UIViewController,CBCentralManagerDelegate,CBPeripheralDelegate { 

    var centralManager: CBCentralManager = CBCentralManager() 
    var peripheral: CBPeripheral? = nil 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     centralManager = CBCentralManager(delegate: self, queue: nil) 
    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 

    } 

    func centralManagerDidUpdateState(_ central: CBCentralManager) 
    { 
     central.scanForPeripherals(withServices: nil, options: nil) 
    } 

    @available(iOS 5.0, *) 
    public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) 
    { 
     let device = (advertisementData as NSDictionary) 
      .object(forKey: CBAdvertisementDataLocalNameKey) 
      as? NSString 

     let isMyIphone = device?.contains("iPhone") 

    } 
} 

對於開始我想看看我周圍的藍牙名稱,爲此我有2個iPhone。 一個我用於執行這個'應用程序'掃描,我想看到另一個iPhone的名稱(在藍牙設置名稱是'iPhone'),但是當我開始掃描方法'didDiscover'被稱爲,但是設備常量爲零。 爲什麼?我錯了什麼?

回答

1

是更好,如果你使用 peripheral.name 代替
設裝置=(advertisementData爲的NSDictionary) .object(forKey:CBAdvertisementDataLocalNameKey) 作爲? NSString

+0

感謝您的回覆!你的回答在技術上不是_answer_,你只是建議如果用戶做了一些不同的事情會更好。更好_how_,究竟是什麼?一些有用的東西:1)利用SO對格式化的支持,並說,例如,「使用'peripheral.name'而不是'let device =((advertisementData as NSDictionary).object(...)', 2)如果你已經看到你的建議改變解決像原始海報那樣的問題,可以明確地說,例如,「我已經完全看到你描述的行爲,並且切換到(...)修復它「。 – evadeflow