Разница между вычисляемым свойством и установкой функции для переменной в Swift - PullRequest
0 голосов
/ 24 октября 2018

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Именно то, что сказал ODYN.Просто больше контекста о том, где может пригодиться 2-й тип.В вашем примере это не имеет смысла, и, возможно, именно поэтому вы запутались!

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 является единственным вычисляемым свойством.

0 голосов
/ 24 октября 2018

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

...