web-dev-qa-db-ja.com

読み取り専用プロパティ

Swiftの「読み取り専用」のヘルプが必要です。さまざまな方法を試しましたが、エラーなしでコンパイルする方法がわかりませんでした。ここに質問と私が考えたことがあります。

IsEquilateralという名前の読み取り専用の計算プロパティを作成します。このプロパティは、三角形の3辺すべてが同じ長さであるかどうかを確認し、等しい場合はtrueを返し、そうでない場合はfalseを返します。

var isEquilateral: Int {

}
29
AllocSystems

このようなもの? (コメントの@ 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
15
Luca Angeletti

「読み取り専用」の保存済みプロパティが必要な場合は、private(set)を使用します。

private(set) var isEquilateral = false

他のプロパティから計算されたプロパティである場合、はい、計算されたプロパティを使用します。

var isEquilateral: Bool {
    return a == b && b == c
}
93
Rob

読み取り専用プロパティは、getterを含むがsetterを持たないプロパティです。値を返すために常に使用されます。

class ClassA {
    var one: Int {
        return 1
    }
    var two: Int {
        get { return 2 }
    }
    private(set) var three:Int = 3
    init() {
        one = 1//Cannot assign to property: 'one' is a get-only property
        two = 2//Cannot assign to property: 'two' is a get-only property
        three = 3//allowed to write
        print(one)//allowed to read
        print(two)//allowed to read
        print(three)//allowed to read
    }
}
class ClassB {
    init() {
        var a = ClassA()
        a.one = 1//Cannot assign to property: 'one' is a get-only property
        a.two = 2//Cannot assign to property: 'two' is a get-only property
        a.three = 3//Cannot assign to property: 'three' setter is inaccessible
        print(a.one)//allowed to read
        print(a.two)//allowed to read
        print(a.three)//allowed to read
    }
}
2
RajeshKumar R