【问题标题】:Unexpectedly found nil while unwrapping an Optional value in For In Loop在 For In 循环中展开可选值时意外发现 nil
【发布时间】: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

标签: xcode swift for-loop core-bluetooth optional


【解决方案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] ?? [] { }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2016-10-18
  • 2017-04-09
  • 2018-09-22
  • 2016-06-26
  • 2016-03-12
相关资源
最近更新 更多