Подтвердить что ты не робот

Swift - Пользовательский сеттер на свойстве

Я конвертирую проект в код Swift и сталкиваюсь с проблемой в сеттер. Мой код Objective-C выглядел так:

- (void)setDocument:(MyDocument *)document
{
    if (![_document isEqual:document]) {
        _document = document;

        [self useDocument];
    }
}

и разрешить моему диспетчеру просмотра запускать это каждый раз, когда документ был установлен (как правило, в методе prepareForSegue: представляющего View Controller).

Я нашел наблюдателей свойств willSet и didSet, но они работают только тогда, когда свойство обновляется, а не когда оно инициализировано и обновлено.

Любые идеи? Благодаря

ОБНОВЛЕНИЕ

после попытки get {} и установить {} я получаю ошибку EXC_BAD_ACCESS

var document: UIDocument? {
    get {
        return self.document!
    }
    set {
        self.document = newValue

        useDocument()
    }
}
4b9b3361

Ответ 1

Вы не можете использовать set, как это, потому что, когда вы вызываете self.document = newValue, вы снова вызываете setter; вы создали бесконечный цикл.

Вместо этого вам нужно создать отдельное свойство, чтобы фактически сохранить значение в:

private var _document: UIDocument? = nil
var document: UIDocument? {
    get {
        return self._document
    }
    set {
        self._document = newValue
        useDocument()
    }
}

Ответ 2

Вот версия Swift 3

var document : UIDocument? {
    didSet {
        useDocument()
    }
}