以下 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
}
}
错误指向第二行的“结果”变量,并显示“可选类型“AnyObject”的值?”未打开;您是否想使用“!”或‘?’?”
该错误没有任何意义,因为“结果”在第一行中展开。另外,升级到XCode 7.3之前也没有问题。如前所述,如果我切换到为模拟器构建,错误就会消失。
我应该将其作为错误发布吗?有没有人有任何见解?
更新
当我第一次遇到此问题时,设备未更新到最新的 iOS 版本 (9.3.1)。我尝试进行编译器建议的更改;这允许代码构建,但在选择模拟器进行构建时引入了错误。另外,当我在设备上运行代码时,代码莫名其妙地崩溃了。
我随后将设备更新至 9.3.1,现在编辑的代码运行时不会崩溃,这使我能够继续开发,但无法解释与模拟器的差异。
接下来我创建了一个新项目并将错误代码复制到 AppDelegate.swift 文件中;该错误再次出现,但是,它也出现在模拟器构建中。进行建议的更改可以解决这两种情况下的问题。
我将继续检查两个项目的build设置,看看是否有更具体的原因导致设备和模拟器之间的行为差异。
最佳答案
这样重写:
if let result = jsonobj["user"] as? NSDictionary {
if let item = result["userID"] as? Int {
self.userID = item
}
}
关于Xcode 7.3/Swift 2.2 错误?代码在模拟器中构建,但在设备上显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36407425/