代码之家  ›  专栏  ›  技术社区  ›  Aditya Srivastava Bishow Gurung

隐式展开可选

  •  -1
  • Aditya Srivastava Bishow Gurung  · 技术社区  · 6 年前

    我正在使用操场运行以下代码

    var a : Int!
    a = nil
    print(a) o/p - none
    print(a!) o/p - crash
    
    a = 5
    print(a) o/p - some(5)
    print(a!) o/p - 5 
    

    我知道optionals是枚举,它有两个类型none或some。 但正如我所宣称的 a 作为隐式展开,我认为我不必展开它来获取实际数据。 我是否理解期权错误?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Duncan C    6 年前

    正如其他人所说,iuos(隐式未包装的选项)现在是常规选项,它向编译器提供了一些提示,使其能够打开它们。

    也就是说,印刷品的处理方式是不同的。尝试使用对非可选变量的赋值。这是一个更好的测试,例如:

    var a : Int! = nil
    let b: Int = a
    
        2
  •  0
  •   Tom E    6 年前

    这里是隐式未包装期权的用例。在任何类中,初始化类实例时必须初始化所有属性。可以为属性指定默认值,也可以使用 init 用于属性初始化的函数。

    但是,在视图控制器中,您不想使用 初始化 功能。某些属性可能没有默认值,但将在 viewDidLoad . 在这种情况下,您可以将该属性声明为隐式展开,因为在视图控制器加载之前无法访问该属性,之后您可以确保 视图加载 (或在调用视图控制器中) prepareForSegue 例如,方法)它不是零,因此从现在起可以安全地访问。

    只需要我的两分钱就可以让你对IUO有更多的了解。