Swift 构造函数括号的工作方式是否与 Javascript IIFE 括号的工作方式相同?

Does a Swift constructor parentheses work the same way as a Javascript IIFE parentheses?

我刚开始学习 Javascript 和 运行,简称 Immediately Invoked Function ExpressionIFFEparentheses结尾马上invokesfunction.

var greetingsObject = function(name){
  return 'Hello' + name;
}(); //will return Hello undefined

Swift 中,我也在学习如何 programmatically 创建对象。我创建了一个 UILabel

var greetingsObject: UILabel = {
 let label = UILabel()
 label.text = "Hello " + nameTextField.text!
 return label
}()

我的问题是 Swift 对象末尾的 parentheses 是否与 JS IFFE 对象末尾的工作方式相同?如果它不 call function 那么它有什么作用?

我首先要指出您的示例中的一个错误:您的代码引用 nameTextFieldgreetingObject 的初始化程序中。无法保证 属性 将首先初始化,因此您不能在 init 闭包中引用另一个 属性。

话虽如此,它在 Swift 中的工作原理与 Javascript 相同。 greetingsObject 将在您初始化 class 实例时进行初始化。当您希望 属性 仅初始化一次并在多个实例之间共享时,通常会使用此 pawttern。

Swift 还使用可选的 lazy 修饰符扩展了概念。使用 lazy,它将在您第一次引用它时初始化 属性。

class ViewController : UIViewController {
    lazy var greetingsObject: UILabel = {
        print("Initialzing greetingsObject")

        let label = UILabel()
        label.text = "Hello World"
        return label
    }()
}

let vc = ViewController() // `greetingsObject` is not yet initialized

print("First reference to greetingsObject")
vc.greetingsObject.text   // it will be initialized here

Swift闭包圆括号

的解释很好

https://medium.com/the-traveled-ios-developers-guide/swift-initialization-with-closures-5ea177f65a5#.89xqavhii