我正在从Apple文档中读取Strong reference cycle for closure
。以下是使用闭包的惰性变量的声明:
lazy var asHTML: () -> String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
下面是Swift中闭包的语法
{(parameters) -> return type in
statements
}
它们看起来不一样,但我知道第一个
asHTML
是闭包的简短形式有人可以引导我了解我如何从原始语法中得出短格式
最佳答案
声明如下
() -> String
这意味着闭包不接受任何参数,并在调用时生成String。此闭包强烈捕获变量self以便能够使用文本。
如果我们采用闭包定义
{(parameters) -> return type in
statements
}
上面的asHTML可以重写为
{ () -> String in
statements
}
要么
{ (Void) -> String in
statements
}
与...相同
lazy var asHTML = asHTML()
func asHTML() -> String {
....
}
另外,您还可以将惰性asHTML声明重写为
lazy var asHTML: String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}()