web-dev-qa-db-ja.com

Swift 4.2 Setter Getter、この関数を通るすべてのパスはそれ自体を呼び出します

Swift 4.2を使用すると、多くの問題が発生し始めました。そのうちの1つは、ゲッターメソッドが値自体を返す必要があるため、解決方法がわからないということです。

何が起こっているのかと思いますが、ゲッターは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;
    }
};
12
Travis Delly

あなたの問題は、ゲッターが返すための保存されたプロパティ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;
    }
}
15
Alexander