Swift有两种方式来声明复杂的属性:
选项1:
var label: UILabel{
var label = UILabel()
label.font = UIFont(name: "ArialRoundedMTBold", size: 18.0)
return label
}
选项2:
var label: UILabel = {
var label = UILabel()
label.font = UIFont(name: "ArialRoundedMTBold", size: 18.0)
return label
}()
有什么区别?
答案 0 :(得分:2)
option1声明一个计算属性,每次调用该属性时,都会重新计算结果。计算属性通常用于替换计算功能。并且let
option2声明一个标签并对其进行自定义。它不是计算属性,这意味着它也可以声明为常量。它可以用作普通属性。
答案 1 :(得分:2)
@Carrl提供的asnwer很好,但我会用option2澄清一些事情:
你在option2中为label分配了什么,它实际上是一个闭包,而()
意味着在大括号中,你立即执行闭包。
想象一下:
let labelClosure: () -> UILabel = {
var label = UILabel()
label.font = UIFont(name: "ArialRoundedMTBold", size: 18.0)
println("here2")
return label
}
这是你在option2中为label分配的闭包,但这只是一个函数,没有执行(参见,大括号末尾没有()
)。因此,如果你想从中创建一个标签,你应该写:
labelClosure()
所以总结一下:在option2中,你将闭包返回值赋给label,与option1相反,后者是一个计算属性。计算属性是什么意思?实际上,它不会存储任何值,它只会在每次调用时计算并返回其值。