代码之家  ›  专栏  ›  技术社区  ›  Pablo

通过闭包初始化属性

  •  2
  • Pablo  · 技术社区  · 6 年前

    我观察到人们有时使用闭包初始化属性。e、 g.代替

    lazy var test1: String = String("a string")
    

    他们使用

    lazy var test2: String = { String("a string") }()
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   pacification    6 年前

    这两个人做同样的工作。当需要额外的代码来配置属性对象时,闭包初始化非常方便。例如。:

    lazy var point: CGPoint = {
        let x = ...
        let y = ...
        return CGPoint(x: x, y: y)
    }()
    
        2
  •  1
  •   Ahmad F    6 年前

    一般来说,如果惰性变量在初始化之后不需要额外的工作,那么声明它就足够了 没有

    例如,对于简单字符串,可以公平地实现:

    lazy var myString = "a string"
    

    但是,当涉及到需要更多编辑(设置)的内容时 CLLocationManager

    lazy var locationManager: CLLocationManager = {
        var lm = CLLocationManager()
    
        // here is one extra thing to do:
        lm.delegate = self
        return lm
    }()
    

    如前所述,在初始化之后,我们需要执行额外的步骤(即 lm.delegate = self 在上面的例子中)。

    lazy var test1: String = String("a string")
    

    lazy var test2: String = { String("a string") }()