2016-12-21 21 views
5

私は迅速に「読み取り専用」のヘルプが必要です。私はいろいろ試してみましたが、エラーなくコンパイルする方法を理解できませんでした。ここに質問と私が考えたことがあります。読み取り専用プロパティ

三角形の3辺がすべて同じ長さであるかどうかをチェックし、そうでない場合はtrueを返すisEquilateralという名前の読み取り専用の計算されたプロパティを作成します。

var isEquilateral: Int { 

} 
+4

それをテストしてみましょう。今、体を埋める。 'return side1 == side2 && side2 == side3'のようなものです。ここで' side1'、 'side2'、および' side3'はクラス/構造体のプロパティです。ああ、isEquilateralはIntではなくBoolでなければなりません。 – vacawama

答えて

7

これは何か? (コメントで@vacawamaにより示唆されるように)

struct Triangle { 
    let edgeA: Int 
    let edgeB: Int 
    let edgeC: Int 

    var isEquilateral: Bool { 
     return (edgeA, edgeB) == (edgeB, edgeC) 
    } 
} 

はのは良いスタートだこと

let triangle = Triangle(edgeA: 5, edgeB: 5, edgeC: 5) 
triangle.isEquilateral // true 

または

let triangle = Triangle(edgeA: 2, edgeB: 2, edgeC: 1) 
triangle.isEquilateral // false 
+0

それは絶対に美しいです!ありがとうございました。どうか教えてください。なぜ私はちょうど言うことができない – AllocSystems

+1

それは絶対に美しいです!ありがとうございました。どうか教えてください。なぜ私はちょうどreturn edgeA == edgeB == edgeCと言うことができませんか? – AllocSystems

+0

@AllocSystemsよろしくお願いします。構文 'edgeA == edgeB == edgeC'はSwiftで__not__で有効です。しかし、私がコードで使ったタプルを避けたいのであれば、 'edgeA == edgeB && edgeB == edgeC'と書くことができます。 –

24

あなたは、保存されたプロパティを「読み取り専用」private(set)を使用したい場合は、次の、

private(set) var isEquilateral = false 

それは他のプロパティから計算プロパティの場合、は、はい、使用計算プロパティ:

var isEquilateral: Bool { 
    return a == b && b == c 
} 
関連する問題