我快速研究*Implicitly Unwrapped Optionals*
。
我知道optional
是值,以检查它是否包含值或nil。
在代码的底部,我声明Implicitly Unwrapped Optionals
。但是,它打印optional(123)
。问题是什么?
if let state03:Int! = Int("123")
{
print("State03 Ok")
let check = state03
print("\(check!)")
print("\(state03)")
}
else
{
print("nil")
}
在optional(?)
的情况下,我理解结果。(可选(123))
但在上述情况下,我不知道为什么结果是optional
。
答案 0 :(得分:0)
您不知道cast
到string
的{{1}}是否为Int("123")
,这就是nil
和optional
的原因。它打印出optional(123)
。如果您确定Int("123")
将成功,您可以!
。
if let state03:Int! = Int("123")!
或者您可以在没有state03
的情况下声明Int!
,并使用Int
。
if let state03:Int = Int("123")
两种解决方案都有效。
答案 1 :(得分:0)
隐式解包的期权也是期权。与其他可选项的区别在于,假定它们始终保持一个值,而不是给出编译时错误nil
。
如果在首次定义可选项后立即确认可选项的值存在,并且可以假定在此后的每个点都存在,则隐式解包的选项会很有用。
因此,您应该将其视为普通的可选项,但在编译期间不会出现错误,因为它假定保留一个值。但是,如果它在具有nil
值时使用,则仍会产生运行时错误。
在您的代码中,将state03
定义为Int
而不是Int!
。
if let
语句将处理Int("123")
nil
的输出。如果它不是nil
,它将执行if块。如果是nil
,它将执行else块。