我一直在看苹果提供的Swift编程语言指南.以下示例来自本书:
class HTMLElement {
let name :String;
let text: String?;
@lazy var asHTML : () -> String = {
if let text = self.text {
return "<\(self.name)>\(self.text)</\(self.name)>";
} else {
return "<\(self.name) />"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我错误地写了关闭如下:
@lazy var asHTML : () -> String = {
if (let text = self.text) {
return "<\(self.name)>\(self.text)</\(self.name)>";
} else {
return "<\(self.name) />"
}
}
Run Code Online (Sandbox Code Playgroud)
注意周围的括号let text = self.text和编译器抱怨:
模式变量绑定不能出现在表达式中
只是想知道什么Pattern Variable Binding意思,以及为什么它不能出现在表达式中?
mat*_*att 14
"模式变量绑定"是您正在做的事情,即let在某些代码的中间使用,而不是在文件或枚举或结构或类的顶层使用,作为声明常量变量的方式.
什么使它成为一个表达是括号.你已经从周围环境中删除了"let"表达,并要求将其作为一个表达式单独评估.但你不能那样做:你不能在任何地方说"让".
查看它的另一种方法就是这样:if let是一个固定的有意义的模式,其中条件是一个可选的被评估为常量以便在if-code中使用.括号分解了模式.
该模式称为绑定,因为您非常临时和本地定义此名称,即仅限于if代码.我认为它可以追溯到LISP(至少,这是我过去以这种方式使用"let"的地方).
| 归档时间: |
|
| 查看次数: |
5287 次 |
| 最近记录: |