以下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文件中;然而,错误再次出现,它也出现在模拟器构建中。进行推荐的更改可以解决两种情况下的问题。
我将继续检查两个项目的构建设置,看看是否有更具体的原因导致设备和模拟器之间的行为差异。
答案 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 {