首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时发生致命错误(未包装时为空)

运行时发生致命错误(未包装时为空)
EN

Stack Overflow用户
提问于 2015-07-12 18:42:00
回答 1查看 93关注 0票数 0

我把一个目标-c代码转换成了斯威夫特,它编译得很完美,但在运行时给了我错误。它说:

致命错误:在展开可选值时意外找到零

那是为什么?代码以objective格式完美运行。

迅捷版:

代码语言:javascript
复制
 @IBAction func conn(sender: UIButton) {
         if self.ble.CM.state != CBCentralManagerState.PoweredOn{

         }
         if self.ble.peripherals.count == 0 {
             self.ble.findBLEPeripherals(2)
        }
         else {
             if !(self.ble.activePeripheral != nil) {
                 self.ble.connectPeripheral(self.ble.peripherals.objectAtIndex(0) as! CBPeripheral)
             }
         }

         btnScan.enabled = false


         indConnecting.startAnimating()
     }

这一行在运行时抛出一个错误:

代码语言:javascript
复制
if self.ble.peripherals.count == 0

目标-c版本:

代码语言:javascript
复制
- (void) tryToConnectToBLEShield {
    //Check core bluetooth state
    if (self.ble.CM.state != CBCentralManagerStatePoweredOn)


    //Check if any periphrals
    if (self.ble.peripherals.count == 0)
        [self.ble findBLEPeripherals:2.0];
    else
        if (! self.ble.activePeripheral)
            [self.ble connectPeripheral:[self.ble.peripherals objectAtIndex:0]];


}

到底发生了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-12 18:52:00

我不熟悉这个库,但基于您的评论,即peripherals是“肯定”的隐式展开可选选项,您可能需要这样的内容:

代码语言:javascript
复制
if (self.ble.peripherals?.count ?? 0) == 0 {
    self.ble.findPeripherals(2)
}

我们仍然可以使用可选的绑定和展开技巧,即使是隐式展开选项。

因此,首先我们使用可选的展开来获取计数:

代码语言:javascript
复制
self.ble.peripherals?.count

这将返回count of peripherals (如果peripherals不是nil),或者安全地返回nil

接下来,我们使用Nil合并操作符:

代码语言:javascript
复制
self.ble.peripherals?.count ?? 0

因此,每当左侧返回nil时,我们将使用0

现在,我们将其与0进行比较,就像您试图做的那样:

代码语言:javascript
复制
(self.ble?.peripherals?.count ?? 0) == 0

count0peripheralsnil时,它将返回0。最终,这就是Objective代码的确切行为,因为方法调用Objective返回NULL/NO/0 (当==-compared与0一起返回时,它们都返回YES )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31371255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档