在 For In 循环中展开可选值时意外发现 nil

Posted

技术标签:

【中文标题】在 For In 循环中展开可选值时意外发现 nil【英文标题】:Unexpectedly found nil while unwrapping an Optional value in For In Loop 【发布时间】:2015-05-21 09:42:30 【问题描述】:

我正在尝试从找到的 CBService 中读取 CBCharacteristic 值,但我不断收到错误消息

fatal error: unexpectedly found nil while unwrapping an Optional value

我的代码如下

func peripheral(peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!, error: NSError!)

    for characteristic in service.characteristics as! [CBCharacteristic]
    
        peripheral.readValueForCharacteristic(characteristic)
    

检查以确保 CBService 不为零,并且看起来是正确的。任何人都知道打开此列表的正确快速方法吗?

【问题讨论】:

尝试使用 if let x = service.characteristics as! [CBCharacteristic] 在 for 循环之前。将 for 循环放入 if let 中。 大多数时候,你应该只使用!,当你100%确定访问它时它不会是nil 【参考方案1】:

谢谢狗咖啡!

func peripheral(peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!, error: NSError!)

    if let characteristics = service.characteristics as? [CBCharacteristic]
    
        for characteristic in characteristics
        
            peripheral.readValueForCharacteristic(characteristic)
        
    

【讨论】:

您可以使用 nil-coalescing 运算符将其缩短为不带 iffor(假设您不希望代码处理 nil):for characteristic in characteristics as? [CBCharacteristic] ?? []

以上是关于在 For In 循环中展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift 错误致命错误:在展开可选值时意外发现 nil

UIPickerView:在展开可选值时意外发现 nil

在 NSCoder 中展开可选值时意外发现 nil

致命错误:在快速 Json 解析中展开可选值时意外发现 nil

致命错误:在展开可选值时意外发现 nil - 为啥?

swift 2 致命错误:在展开可选值时意外发现 nil - 类别名称