J'ai besoin d'aide avec "lecture seule" dans Swift. J'ai essayé de différentes manières, mais je ne pouvais simplement pas comprendre comment le compiler sans erreurs. Voici la question et ce que j'ai pensé.
Créez une propriété calculée en lecture seule nommée isEquilateral qui vérifie si les trois côtés d'un triangle ont la même longueur et renvoie true si elles le sont et false si elles ne le sont pas.
var isEquilateral: Int {
}
Quelque chose comme ça? (comme suggéré par @ vacawama dans les commentaires)
struct Triangle {
let edgeA: Int
let edgeB: Int
let edgeC: Int
var isEquilateral: Bool {
return (edgeA, edgeB) == (edgeB, edgeC)
}
}
Testons-le
let triangle = Triangle(edgeA: 5, edgeB: 5, edgeC: 5)
triangle.isEquilateral // true
ou
let triangle = Triangle(edgeA: 2, edgeB: 2, edgeC: 1)
triangle.isEquilateral // false
Si vous voulez une propriété stockée en "lecture seule", utilisez private(set)
:
private(set) var isEquilateral = false
S'il s'agit d'une propriété calculée à partir d'autres propriétés, alors, oui, utilisez la propriété calculée:
var isEquilateral: Bool {
return a == b && b == c
}
Une propriété en lecture seule est une propriété avec getter
mais pas setter
. Il est toujours utilisé pour renvoyer une valeur.
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
}
}