@NONAME8

Не совсем понимаю принцип вычисляемых свойств?

Помню после того, как я пробовал изучать objective-c у меня осталось определенное убеждение, что когда мы создаем переменную типа : var per = 5 , то для ее создания работают методы get и set.

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

И тогда у меня возникло несколько вопросов:

Существуют ли вообще те сеттеры и гетеры, которые работают с самой переменной при ее создания ?
Или эти сеттеры и гетеры - это просто дополнительный функционал, который используется для вычислительных свойств ?
А переменную мы создаем без них, а обычно?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@freeg0r
.. some dude ..
Каждая переменная класса имеет выделенных для нее память, а computed properties не имеют. В геттере и сеттере вы просто определяете какое то выражение, которое выполняется в при соответствующей операции. Хороший пример со временем:
class Time {
    var seconds:Double = 0
    
    init(seconds: Double) {
        self.seconds = seconds
    }
    
    var minutes: Double {
        get {
            return (seconds / 60)
        }
        set {
            self.seconds = (newValue * 60)
        }
    }
    
    var hours: Double {
        get {
            return (seconds / (60 * 60))
        }
        set {
            self.seconds = (newValue * (60 * 60))
        }
    }
    
    var days:  Double {
        get {
            return (seconds / (60 * 60 * 24))
        }
        set {
            self.seconds = (newValue * (60 * 60 * 24))
        }
    }
}


Просто абстракция, можно использовать конечно и функцию вместо этого, но так в некоторых случаях более "элегантно" что ли..
Хороший промер есть ещё в iBook Swift книге с прямоугольником.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
23 апр. 2024, в 19:21
300 руб./за проект
23 апр. 2024, в 19:05
15000 руб./за проект
23 апр. 2024, в 19:01
7000 руб./за проект