属性为' = {return}()'或者' {return}'?

时间:2015-03-01 09:33:45

标签: swift

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
}()

有什么区别?

2 个答案:

答案 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相反,后者是一个计算属性。计算属性是什么意思?实际上,它不会存储任何值,它只会在每次调用时计算并返回其值。