Вычисляемая переменная возвращает 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()
Другие вопросы по тегам