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

标签 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
    }
}

错误指向第二行的“结果”变量,并显示“可选类型“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/

相关文章:

authentication - 如何为 Split View Controller 创建启动页面

ios - 当 leftBarButtonItem 工作正常时,RightBarButtonItem 未显示

swift - cocoa Xcode : Open Window Controller from AppDelegate Programmatically using Swift 4 for Mac?

ios - 适用于 iOS 的 Uber SDK - 通过深度链接获取实时乘车请求状态

swift - 在 MainActor 调用后 asyncDetached 回退到主线程

ios - 解析 swift 中管理员的 ACL 角色

ios - 如何在 objective-c 中的单个 View Controller 上加载多个 UIView

ios - 如何在 Safari iOS 中启用从深层链接启动应用程序

ios - 从 View Controller 访问 TableView 单元格中的 UISegmentedControl

ios - 关闭 Controller 并返回时的 InputAccessoryView 错误