因此,当我从公司的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,完全打开。我不知道为什么一旦我把它放在实例变量中它再次将它包装回来,特别是因为它明确地解开了。这令人非常沮丧,所以非常感谢任何帮助
答案 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
不是对象类型,因此您需要使用值初始化它。