Swift 构造函数括号的工作方式是否与 Javascript IIFE 括号的工作方式相同?
Does a Swift constructor parentheses work the same way as a Javascript IIFE parentheses?
我刚开始学习 Javascript
和 运行,简称 Immediately Invoked Function Expression
或 IFFE
。 parentheses
结尾马上invokes
function
.
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
那么它有什么作用?
我首先要指出您的示例中的一个错误:您的代码引用 nameTextField
在 greetingObject
的初始化程序中。无法保证 属性 将首先初始化,因此您不能在 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闭包圆括号
的解释很好
我刚开始学习 Javascript
和 运行,简称 Immediately Invoked Function Expression
或 IFFE
。 parentheses
结尾马上invokes
function
.
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
那么它有什么作用?
我首先要指出您的示例中的一个错误:您的代码引用 nameTextField
在 greetingObject
的初始化程序中。无法保证 属性 将首先初始化,因此您不能在 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闭包圆括号
的解释很好