值包含在选项中两次

时间:2016-10-13 22:38:23

标签: ios swift

因此,当我从公司的API中获取数据时,我遇到了令人难以置信的令人沮丧的情况。也就是说,当我使用我期望成为Int的值(并且是从后端发送的Int)时,让我们使用" userID"例如,它在可选项中变为双重包装。我正在尝试将其转换为显式解包的Int值(var userID : Int!),所以当我从API中取出它时我会执行此操作self.userID = responseObject["id"] as! Int但是一旦我将其打印出来,我就会将其打印出来LLDB

Optional<Int>
- some : 7575235

所以如果我试着把它变成一个字符串就变成了这个

Optional<String>
- some : "Optional(7575235)"

...当我在控制台中执行po responseObject["id"] as! Int时,这令人非常沮丧,它会返回我期望的内容,即7575235,完全打开。我不知道为什么一旦我把它放在实例变量中它再次将它包装回来,特别是因为它明确地解开了。这令人非常沮丧,所以非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

  

我不知道为什么一旦我把它放在实例变量中它再次将它包装起来,特别是因为它明确地解开了

是通过键入self.userID作为Int!再次将其重新包装的人。隐式解包的Optional 是一个Optional 。将Int分配给可选的Int将其包装在Optional中 - 这正是您在说过时所做的

self.userID = responseObject["id"] as! Int
你知道吗? responseObject["id"] as! Int是Int,是的;但是self.userID本身是一个可选的包装Int,所以赋值将Int包装成一个Optional。

对于一个隐式解包可选的意思是,如果你使用它的包装类型,那么解包。例如,您可以传递self.userID,其中包含Int,并且将为您解包包含的Int进行解包。但是,如果你问{em> 实际上是什么,那么为什么呢,那么,这是一个可选项 - 因为将它变成了一个可选项。< / p>

答案 1 :(得分:0)

尝试这样做: -

var userID = 0

self.userID = responseObject["id"] as! Int
let stringValue = String(self.userID)

此处的问题是Int不是对象类型,因此您需要使用值初始化它。