Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 7.3/Swift 2.2错误?代码在模拟器中生成,但在设备上显示错误_Xcode_Swift - Fatal编程技术网

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

Xcode 7.3/Swift 2.2错误?代码在模拟器中生成,但在设备上显示错误,xcode,swift,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'的值?”未展开;您

以下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'的值?”未展开;您的意思是使用“!”还是“?”?”

错误没有意义,因为“result”在第一行中展开。另外,在升级到XCode 7.3之前也没有问题。如前所述,如果我切换到构建模拟器,错误就会消失

我应该把它作为bug发布吗?有人有什么见解吗

更新

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

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

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

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

重写如下:

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

我必须在第一行中为“result”提供一个显式类型:

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

如果let item=result[“userID”]as,则正确的可选绑定语法是
?Int{}
@vadian仅当结果[“userID”]不是Int时?@user3441734我不明白。此可选绑定语法意味着仅当
result
中的键
userID
存在且类型为
Int
时,才设置
self.userID
。默认情况下,字典键的值始终是
AnyObject?
,除非字典声明得更具体。@vadian if result的类型为[String:Int]。。。。比看我的答案//(3)@user3441734,JSON
用户
字典不太可能是
[String:Int]
,即使是,在这个特殊情况下,编译器也不知道这一点。