Почему мы можем вернуться из свойства didSet?
Когда я создавал рекурсию в didSet, я обнаружил, что могу просто поставить возврат и выход из программы из didSet. Но я нигде не нашел (долго искал), что могу поставить возвращаемое слово для выхода из didSet. Итак, разве набор работает как вычисляемое свойство, где мы можем вернуть значение? Пожалуйста, если кто-то знает что-нибудь, я был бы очень признателен. Спасибо.
class AppDetailController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
var app : App? {
didSet {
if app?.screenshots != nil {
return
}
if let id = app?.id {
let urlString = "https://api.letsbuildthatapp.com/appstore/appdetail?id=\(id)"
URLSession.shared.dataTask(with: URL(string: urlString)!, completionHandler: { (data, response, error) in
if error != nil {
print(error)
}
do {
let json = try(JSONSerialization.jsonObject(with: data!, options: .mutableContainers ))
let appDetail = App()
appDetail.setValuesForKeys(json as! [String: AnyObject])
self.app = appDetail
} catch let error as NSError {
print(error.localizedDescription)
}
}).resume()
}
}
}
3 ответа
Нет, didSet не имеет никакого отношения к вычисляемому свойству. На самом деле didSet {}
а также willSet
для сохраненных свойств, и они играют роль didChangeValue
а также willChangeValue
, Таким образом, вы можете изменить другие данные в вашем классе или структуре или запустить какой-либо метод в соответствии с изменением значения свойства, которое вы хотите определить didSet
а также willSet
для этого.
Они работают как функция и имеют свойство. newValue
за willSet
что дает вам новое значение будет установлено для вашей собственности и oldValue
за didSet
это дает вам старую стоимость вашей собственности до изменения ее стоимости. Вы можете изменить имя этих свойств следующим образом:
willSet(myNewValue) { }
didSet(myOldValue) { }
Вещь в фигурных скобках после срока willSet
или же didSet
это функциональное тело. Вы выходите из тела функции, говоря return
,
didSet является наблюдателем свойства, и он вызывается каждый раз, когда в хранимом свойстве сохраняется новое значение.
Рассмотрим didSet как метод, возвращающий void. Вы проверяете условие в своем коде, если оно выполнено, вы можете вернуться, чтобы остальная часть кода не могла быть выполнена.