Swiftの「読み取り専用」のヘルプが必要です。さまざまな方法を試しましたが、エラーなしでコンパイルする方法がわかりませんでした。ここに質問と私が考えたことがあります。
IsEquilateralという名前の読み取り専用の計算プロパティを作成します。このプロパティは、三角形の3辺すべてが同じ長さであるかどうかを確認し、等しい場合はtrueを返し、そうでない場合はfalseを返します。
var isEquilateral: Int {
}
このようなもの? (コメントの@ 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
「読み取り専用」の保存済みプロパティが必要な場合は、private(set)
を使用します。
private(set) var isEquilateral = false
他のプロパティから計算されたプロパティである場合、はい、計算されたプロパティを使用します。
var isEquilateral: Bool {
return a == b && b == c
}
読み取り専用プロパティは、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
}
}