隐含地打开选项和打印结果

时间:2015-12-20 07:23:58

标签: ios swift optional

我快速研究*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

2 个答案:

答案 0 :(得分:0)

您不知道caststring的{​​{1}}是否为Int("123"),这就是niloptional的原因。它打印出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块。