У меня есть два способа установить строку, которую я видел в SO.

Мне интересно, в чем преимущество одного перед другим, и может ли кто-нибудь дать мне ссылку на статью или документацию по этому синтаксису.

Я считаю, что первое называется вычисляемым свойством, и я прочитал раздел «Вычисленные свойства» на сайте swift.org.

Я думаю, что второй на самом деле просто устанавливает имя константы 'string2' для закрытия, но я, возможно, не назову это правильным, поэтому я спрашиваю, потому что я действительно не могу найти никаких статей или документации по нему. Спасибо за заранее за любую помощь.

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

let string2 = { return "My second string"}()
2
jonathan3087 24 Окт 2018 в 02:29

2 ответа

Лучший ответ

Код в вычисляемом свойстве выполняется каждый раз, когда вы ссылаетесь на эту переменную. Код в свойстве, инициализированный замыканием, выполняется только один раз во время инициализации.

4
Kon 24 Окт 2018 в 00:57

В точности то, что сказал 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 - единственное вычисленное свойство.

2
Honey 24 Окт 2018 в 01:58
52959104