Вычисляемое свойство Getter против переменной, которая возвращает значение

Есть ли разница между вычисляемым геттером свойством и переменной, которая возвращает значение? Например, есть ли разница между следующими двумя переменными?

var NUMBER_OF_ELEMENTS1: Int {
    return sampleArray.count
}

var NUMBER_OF_ELEMENTS2: Int {
    get {
        return sampleArray.count
    }
}

2 ответа

Решение

Свойство компьютера с getter и setter имеет следующую форму:

var computedProperty: Int {
    get {
        return something // Implementation can be something more complicated than this
    }
    set {
        something = newValue // Implementation can be something more complicated than this
    }
}

В некоторых случаях установщик не требуется, поэтому вычисляемое свойство объявляется как:

var computedProperty: Int {
    get {
        return something // Implementation can be something more complicated than this
    }
}

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

Поскольку часто бывает, что вычисляемые свойства имеют только геттер, Swift позволяет упростить их реализацию, опуская get блок, что делает код более простым для написания и чтения:

var computedProperty: Int {
    return something // Implementation can be something more complicated than this
}

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

Они идентичны, поскольку оба определяют вычисляемое свойство только для чтения. Но первое предпочтительнее, потому что оно короче и более читаемо, чем второе.

Другие вопросы по тегам