Mas*_*eni 11 var let variable-declaration swift swift3
我发现在Swift中声明变量的这些不同方法非常有趣:
// METHOD 1
var dogName: String = "Charlie"
// METHOD 2
var dogName: String {
return "Charlie"
}
// METHOD 3
let dogName = {
return "Charlie"
}
// METHOD 4
var dogName: String = {
return "Charlie"
}()
Run Code Online (Sandbox Code Playgroud)
显然方法3声明了一个让我们知道差异; 但为什么Swift允许方法4?
这四种方法有什么区别?
我在方法2和方法4之间特别混淆.另外,为什么方法3与方法4相比失去了最后的括号?
Tho*_*mas 10
方法1是String的标准变量声明.它有一个二传手和一个吸气剂
var dogName: String = "Charlie"
print(dogName) -> "Charlie"
dogName = "Rex" // Valid
Run Code Online (Sandbox Code Playgroud)
方法2是String类型的计算属性,是只读的
var dogName: String {
return "Charlie"
}
print(dogName) -> "Charlie"
dogName = "Rex" // Invalid as property is read-only
Run Code Online (Sandbox Code Playgroud)
方法3是type() - > String的只读属性,所以基本上是一个lambda函数.
let dogName = {
return "Charlie"
}
print(dogName) -> "(Function)"
print(dogName()) -> "Charlie"
dogName = "Rex" // Invalid as property is read-only
Run Code Online (Sandbox Code Playgroud)
方法4是一个闭包,它将在初始化包含对象时执行.因为它是一个var你可以用另一个值替换它
var dogName: String = {
return "Charlie"
}()
print(dogName) -> "Charlie"
dogName = "Rex" // Valid
Run Code Online (Sandbox Code Playgroud)
话虽如此,因为方法4是一个闭包,你可以在其中执行其他命令.下面是一个示例,您可以使用此构造初始化UILabel:
var dogNameLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
label.text = "Charlie"
return label
}()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |