2016-07-19 10 views
4

私は、菱形の周囲に&の領域を計算する単純なコードのブロックを持っています。Swiftでgetとsetを使用する方法

var perimeterOfRhombus: Double { 
     get { 
      let twoSides1 = sideLength1 + sideLength1 
      let twoSides2 = sideLength2 + sideLength2 
      let finalPerimeter = twoSides1 + twoSides2 
      return finalPerimeter 
     } set { 
     } 
    } 

私が紛失しているのは、設定セクションです。

最初にsideLength1とsideLength2が何であるかを示したいと思います。

値がない場合、どのようなnewValueが使用されているのかわかりません。

これはセットを使わずに動作しますが、Appleのswift言語ガイドを参照してください。

このコードでは、実際には設定が必要ない場合は、通常どのように使用しますか?

+1

になります。菱形の面積をどのように設定するのかは論理的ですか?ありそうもない。だからあなたのvarは本当に読み込み専用でセッターはありません – Wain

+0

同様の質問はhttp://stackoverflow.com/questions/29690521/set-value-to-computed-properties-in-swiftを比較してください。 –

答えて

13

計算されたプロパティではなく、の読み取り専用の計算されたプロパティを参照する必要があります。

getterを持つがsetterを持たない計算されたプロパティは、読み取り専用の計算プロパティと呼ばれます。常に値を返し、別の値に設定することはできません。

var perimeterOfRhombus: Double { 
    let twoSides1 = sideLength1 + sideLength1 
    let twoSides2 = sideLength2 + sideLength2 
    let finalPerimeter = twoSides1 + twoSides2 
    return finalPerimeter 
} 

計算されたプロパティは実際には値を格納しません。代わりに、他のプロパティと値を間接的に取得して設定するためのゲッタとオプションのセッタを提供します。

読み取り専用プロパティを含む計算されたプロパティは、定数ではなく変数として設定する必要があります。この場合

struct Square { 
    var edge: Double = 0 

    var area: Double { 
    get { 
     return edge * edge 
    } 
    set (newArea){ 
     edge = sqrt(newArea) 
    } 
    } 
} 

、セッターは、プロパティの値を設定するが、計算されたプロパティが計算された他のプロパティの値を設定するために使用することができません。

についてnewValue、それは、速記セッター宣言と呼ばれています - 計算されたプロパティのセッターがnewValueのデフォルト名が使用され、設定する新しい値の名前を定義していない場合。

ので、上記の例では、一般的なケースであなたの特別な例を混同しないでください

struct Square { 
    var edge: Double = 0 

    var area: Double { 
    get { 
     return edge * edge 
    } 
    set { 
     edge = sqrt(newValue) //someSquare.area = 25 (25 is newValue) 
    } 
    } 
} 
+1

'set(...)'のおかげで、それは私に啓示されました:) – LinusGeffarth

関連する問題