質問: (5.0 / 9.0) * (newValue - 100.0) } } } ``` この状態で新しい`fahrenheit`の値を代入すると、セッタが実行されることにより、`celsius`の値も更新されます。 Swift実践入門という本の139ページ目に次のような記述があります。 「セッタ内では、暗黙的に宣言されたnewValueという定数を通じて代入された値にアクセスできます。この値を使用してセッタの実行後にゲッタがnewValueと同じ値を返せるようにインスタンスを更新します。」 初めのコード(`celsius`と`fahrenheit`の値が一対一に対応する)では、この文章の通りに振舞っても、問題ないと思います。 しかしながら、二番目のコードでは、セッタが実行された後、`celsius`の値は更新されますが、その値はゲッタから考えられる値とは異なります。 つまり、二番目のコードにおいて、`fahrenheit`の値を0とすると、セッタが実行され、その値は-100になります。 そして、-100はゲッタから考えられる値とは異なります。(ゲッタから考えられる値は-148) それでは、Swift実践入門の「セッタの実行後にゲッタがnewValueと同じ値を返せるようにインスタンスを更新します。」という文章は別のプロパティが関係するときの話になるのでしょうか? 回答お願いします。
回答: その本を読んでいないので外しているかもしれませんが、「あなたが作るプログラム」で「同じ値を返せるようにインスタンスを更新」しなければいけない、という意味ですね。 逆に、あえて異なる値を取るようなゲッター、セッターを作ることもできます。例えば、角度をあらわすプロパティでは、セッターでは好きな角度を入力できるが、ゲッターで0度から360度に正規化する、ということも考えられます(セッターで正規化しないので、別の関数で正規化前の値を取り出すことができます)。