Swift 4.2 Setter Getter, все пути через эту функцию будут вызываться сами - PullRequest
0 голосов
/ 16 октября 2018

В Swift 4.2 я начал видеть много проблем, и одна из них, я не совсем уверен, как решить, так как мой метод получения должен возвращать само значение.

Я представляю, чтопроисходит, что получатель попытается получить доступ к получателю при вызове self.type

Как я могу решить эту проблему?

Вот скриншот кода с ошибкой.

enter image description here

Заранее спасибо

Вотписьменный код

@objc var type: DecisionType {
    set {
        if(newValue == DecisionType.DecisionDouble){
            //Yes button and NO button should be showing
            okButton.isHidden = true;
            yesButton.isHidden = false;
            noButton.isHidden = false;
        }
        else {
            //Only Ok button should be showing
            okButton.isHidden = false;
            yesButton.isHidden = true;
            noButton.isHidden = true;
        }
    }
    get {
        return self.type;
    }
};

1 Ответ

0 голосов
/ 16 октября 2018

Ваша проблема в том, что нет хранимого свойства type для возврата получателю.type является вычисляемым свойством.Когда вы пытаетесь прочитать его значение, он вызывает определитель, который вы определили.Этот геттер вызывает геттер, который в свою очередь вызывает геттер, который вызывает геттер ... и так далее.У вас бесконечная рекурсия.

Скорее всего, то, что вы намеревались сделать, это иметь хранимое свойство, которое просто имеет некоторое причудливое поведение, когда бы оно ни было установлено.Вместо использования вычисляемого свойства с пользовательскими get и set используйте хранимое свойство с блоком willSet или didSet:

@objc var type: DecisionType {
    didSet {
        let isDecisionDouble = newValue == DecisionType.DecisionDouble

        okButton.isHidden = isDecisionDouble;
        yesButton.isHidden = !isDecisionDouble;
        noButton.isHidden = !isDecisionDouble;
    }
}
...