我需要在Swift中处理“只读”。我尝试了各种方法,但是无法编译通过。以下是问题和我的想法。
创建一个名为isEquilateral的只读计算属性,用于检查三角形的所有三条边是否具有相同的长度,如果是,则返回true;否则返回false。
var isEquilateral: Int {
}
private(set)
:private(set) var isEquilateral = false
如果它是从其他属性计算而来的属性,那么是的,使用计算属性:
var isEquilateral: Bool {
return a == b && b == c
}
为了完整起见,并且可能是不必要的,如果它是一个常量,你只需要使用 let
:
let isEquilateral = true
或者
struct Triangle {
let a: Double
let b: Double
let c: Double
let isEquilateral: Bool
init(a: Double, b: Double, c: Double) {
self.a = a
self.b = b
self.c = c
isEquilateral = (a == b) && (b == c)
}
}
`public internal(set) var isEquilateral = false`
以允许模块中的其他类更新该属性或者...`public private(set) var isEquilateral = false`
如果您只希望类实现更新该属性。 - Jason Crocker像这样吗?(正如在评论中建议的@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
edgeA == edgeB == edgeC
是 __无效的__。但是,如果你想避免我在代码中使用的元组,你可以写成 edgeA == edgeB && edgeB == edgeC
。 - Luca AngelettiedgeA == edgeB && edgeB == edgeC
语法比元组语法更可取,因为你可以一眼看出代码在做什么。使用元组时,你必须仔细阅读它正在做什么才能推理逻辑。 - 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
}
}
return side1 == side2 && side2 == side3
,其中side1
,side2
和side3
是您类/结构体的属性。哦,isEquilateral
应该是Bool
类型,而不是Int
。 - vacawama