我正在从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) />"
        }
    }()

08-06 19:53