Swift iOS - зачем использовать didSet, когда вы можете просто изменить переменную, и значение все равно изменится?

Я прочитал это ТАК, сделал набор вопросов и ответов, Apple's Property Observers и несколько других постов. Кажется, что я не могу обернуть голову вокруг того, что является преимуществом использования didSet при изменении переменной, когда, если вы измените переменную без использования наблюдателя свойства, она все равно изменится?

Сценарий 1:

var someVal = 0

someVal = 10

// someVal now holds 10

Сценарий 2:

var someVal: Int = 0{

    didSet{
    }
}

someVal = 10

// again someVal now holds 10

Сценарий 3:

var someVal: Int = 0{

    didSet{

       if someVal > oldValue{

            someVal = newValue
       }
    }
}

someVal = 10

// once again someVal holds a value of 10

Единственное, что я вижу в Сценарии 3, это то, что если условие не выполняется, то someVal не изменится. Но вместо того, чтобы добавить его в didSet, я могу просто сделать это, и произойдет то же самое.

var someVal = 0

var anotherVal = 10

if someVal < anotherValue{
     someVal = anotherValue
}

// once again someVal holds a value of 10

Так что же, кроме того, добавить условие в наблюдателя didSet, в чем выгода?

3 ответа

Решение

Ну, это наблюдатель. Много раз вы хотите отреагировать на изменение значения свойства viewController. Теперь, если вы измените это свойство в 10 разных местах, вам не нужно копировать / вставлять один и тот же код 10 раз - didSet Об этом позаботится наблюдатель.

Например:

var someVal: Int = 0 {
    didSet {
        somePostprocessing()
    }
}


someVal = 10

// a bit later

someVal = 15

// etc.

намного лучше чем:

var someVal: Int = 0


someVal = 10
somePostprocessing()

// a bit later

someVal = 15
somePostprocessing()

// etc.

В первом случае вы можете быть уверены, что при каждом изменении значения произойдет постпроцессинг. Во втором случае, даже если мы захотим принять копирование / вставку (что не в порядке), как вы можете быть уверены, что не забудете добавить postProcessing в каждом случае, когда вы изменяете значение?

didSet является наблюдателем свойства в Swift

didSet{

}

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

Например:

У меня есть UILabel на наш взгляд (как в MVC)

@IBOutlet weak private var someLabel: UILabel!

и у нас есть его значение в другой переменной в нашей программной модели, как в (MVC), как

var someValue: Int = 10

поэтому, когда бы я ни обновлял свою переменную в модели, UILabel в представлении также должен обновляться.

Это может быть сделано с помощью didSet как

var someValue: String = "Hello"{
    didSet{
        someLabel.text = someValue
    }
}

Итак, здесь вы можете получить некоторую интуицию о том, что сделал didSet. В приведенном выше примере, когда значение переменной в модели изменяется, представление также обновляется.

Предположим, у вас есть массив каналов tableView этот массив можно изменить в любом месте кода вместо записи

 self.tableView.reloadData()

каждое изменение, которое нужно использовать, делает didSet

var someVal: [String] = [] {

didSet{

    self.tableView.reloadData()
}
}

это простой пример, есть много полезных случаев

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