Xcode 7.3 / Swift 2.2错误?代码在模拟器中构建,但在设备上显示错误

时间:2016-04-04 15:57:01

标签: xcode swift

以下swift代码段在为模拟器构建时正确编译,但如果我选择我的iPhone 4设备(iOS 9.3.1),XCode会抱怨:

if let result = (jsonobj["user"] ?? jsonobj["users"]!) {
    if let item = result["userID"] as Int {
        self.userID = item
    }
}

错误指向第二行的'result'变量并说“可选类型的值'AnyObject?'没打开;你的意思是用'!'还是'?'?“

错误没有意义,因为“结果”在第一行中被解包。此外,在升级到XCode 7.3之前没有问题。如上所述,如果我切换到构建模拟器,错误就会消失。

我应该将此作为错误发布吗?有没有人有任何见解?

更新

当我第一次遇到此问题时,设备未更新到最新的iOS版本(9.3.1)。我试图进行编译器建议的更改;这允许代码构建,但是在为构建选择模拟器时引入了错误。此外,当我在设备上运行时,代码莫名其妙地崩溃了。

我随后将设备更新为9.3.1,现在编辑后的代码运行时没有崩溃,这使我能够继续开发,但没有解释与模拟器的区别。

接下来,我创建了一个新项目,并将错误代码复制到AppDelegate.swift文件中;然而,错误再次出现,它也出现在模拟器构建中。进行推荐的更改可以解决两种情况下的问题。

我将继续检查两个项目的构建设置,看看是否有更具体的原因导致设备和模拟器之间的行为差​​异。

2 个答案:

答案 0 :(得分:0)

Rewrite like this:

if let result = jsonobj["user"] as? NSDictionary {
    if let item = result["userID"] as? Int {
        self.userID = item
    }
}

答案 1 :(得分:0)

我必须为'结果提供明确的类型。在第一行:

if let result:AnyObject = jsonobj["user"] as? Int {