我发现在
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" }()
显然方法3声明了一个让我们知道差异;但为什么Swift允许方法4?
这四种方法有什么区别?
方法1是String的标准变量声明.它有一个二传手和一个吸气剂
var dogName: String = "Charlie" print(dogName) -> "Charlie" dogName = "Rex" // Valid
var dogName: String { return "Charlie" } print(dogName) -> "Charlie" dogName = "Rex" // Invalid as property is read-only
方法3是类型() – >的只读属性.字符串,所以基本上是一个lambda函数.
let dogName = { return "Charlie" } print(dogName) -> "(Function)" print(dogName()) -> "Charlie" dogName = "Rex" // Invalid as property is read-only
方法4是一个闭包,它将在初始化包含对象时执行.因为它是一个var,你可以用另一个值替换它
var dogName: String = { return "Charlie" }() print(dogName) -> "Charlie" dogName = "Rex" // Valid
话虽这么说,因为方法4是一个闭包,你可以在其中执行其他命令.下面是一个示例,您可以使用此构造初始化UILabel:
var dogNameLabel: UILabel = { let label = UILabel(frame: CGRect(x: 0,y: 0,width: 10,height: 10)) label.text = "Charlie" return label }()