web-dev-qa-db-fra.com

Propriétés en lecture seule

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 {

}
29
AllocSystems

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
15
Luca Angeletti

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
}
93
Rob

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
    }
}
2
RajeshKumar R