计算 属性 和将函数设置为 Swift 中的变量之间的区别

difference between a computed property and setting a function to a variable in Swift

我有这两种设置字符串的方法,我在SO中看到过。

我想知道一个比另一个有什么优势,是否有人可以给我 link 这篇语法的文章或文档。

我相信第一个被称为计算 属性 并且我已经阅读了关于 swift.org 的计算 属性 部分。

我认为第二个实际上只是将常量名称“string2”设置为一个闭包,但我可能没有正确地称呼它,这就是我问的原因,因为我真的找不到任何文章或文档就可以了。在此先感谢您的帮助。

var string1: String { return "My first string"}

let string2 = { return "My second string"}()

每次引用该变量时,计算 属性 中的代码都会执行。由闭包初始化的 属性 中的代码仅在初始化期间执行一次。

正是ODYN所说的。更多关于第二种类型可能派上用场的上下文。在您的示例中,它没有任何作用,也许这就是您感到困惑的原因!

var ageOfGrandpa = 87
var ageOfGrandma = 83

class Person {

    var ageAt2018 : Int 

    var ageAt2017 : Int { // computed property
        return ageAt2018 - 1
    }

    var ageAtBirth : Int = 0
    var dumbWay_AgeAtBith : Int = { return 0}() // There is no computation so this is a bad example of instantiation.

    var non_dumbWay_AgeAtBith : Int = 0 // if there is nothing to calculate then just instantiate it with a value!
    var non_dumbWay_AverageAgeOfGrandParents : Int = { // this is where using a block makes sense. There are multiple lines for you to do until you create the value you need
       return (ageOfGrandma + ageOfGrandpa ) / 2
    }()

    init(ageAt2018: Int) {
        self.ageAt2018 = ageAt2018
    }
}

ageAt2017外,所有其他属性都是存储的属性。 ageAt2017 是唯一的 computed 属性。