Вычисляемая переменная возвращает self, если существует, или новый экземпляр, если nil
Если у меня есть ScoreModel
для моего приложения, которое мне нужно перейти к следующему UIViewController
, Может не существовать и, следовательно, не переходить на этот новый UIViewController
, Если это так, я бы хотел, чтобы он создал новый экземпляр модели. Это не сработает (бесконечный цикл), но даст представление о том, что я пытаюсь создать:
var scoreModel : ScoreModel! {
get {
if self.scoreModel == nil {
return ScoreModel()
} else {
return self.scoreModel
}
}
set {
self.scoreModel = newValue
}
}
Как я могу проверить, если текущая версия scoreModel == nil
без зацикливания?
3 ответа
Что если вместо того, чтобы пытаться возиться с пользовательскими методами получения / установки, вы просто сделали свое свойство ScoreModel необязательным (в любом случае, лучше договориться), и когда вы хотите передать его следующему контроллеру представления, вы проверяете, имеет ли оно значение nil. Что-то вроде этого:
var scoreModel: ScoreModel?
let nextViewController = UIViewController()
nextViewController.scoreModel = scoreModel ?? ScoreModel()
На самом деле вы говорите о ленивой инициализированной переменной
lazy var scoreModel = ScoreModel()
Инициализатор вызывается при первом обращении к переменной.
Вы можете использовать ленивую переменную типа этого:
class Test {
lazy var scoreModel: ScoreModel = {
return ScoreModel()
}()
}
let test = Test()
test.scoreModel = ScoreModel()