2016-12-21 19 views
5

Potrzebuję pomocy w trybie "tylko do odczytu" w trybie szybkim. Próbowałem na różne sposoby, ale po prostu nie mogłem wymyślić, jak je skompilować bez błędów. Oto pytanie i o czym myślałem.Właściwości tylko do odczytu

Utwórz właściwość obliczoną tylko do odczytu o nazwie isSą stronę, która sprawdza, czy wszystkie trzy boki trójkąta są tej samej długości i zwraca wartość true, jeśli są i są fałszem, jeśli nie są.

var isEquilateral: Int { 

} 
+4

że to dobry początek. Teraz wypełnij ciało. Coś jak 'return side1 == side2 && side2 == side3' gdzie' side1', 'side2' i' side3' są właściwościami twojej klasy/struktury. Och, 'jestWewnętrzny' powinien być' Bool', a nie 'Int'. – vacawama

Odpowiedz

7

Coś takiego? (Jak sugeruje @vacawama w komentarzach)

struct Triangle { 
    let edgeA: Int 
    let edgeB: Int 
    let edgeC: Int 

    var isEquilateral: Bool { 
     return (edgeA, edgeB) == (edgeB, edgeC) 
    } 
} 

Przetestujmy to

let triangle = Triangle(edgeA: 5, edgeB: 5, edgeC: 5) 
triangle.isEquilateral // true 

lub

let triangle = Triangle(edgeA: 2, edgeB: 2, edgeC: 1) 
triangle.isEquilateral // false 
+0

To jest absolutnie piękne! Dziękuję Ci. proszę, powiedz mi coś. Dlaczego nie mogę po prostu powiedzieć – AllocSystems

+1

To jest absolutnie piękne! Dziękuję Ci. proszę, powiedz mi coś. Dlaczego nie mogę po prostu powiedzieć powrót edgeA == edgeB == edgeC? – AllocSystems

+0

@AllocSystems Nie ma za co. Składnia 'edgeA == edgeB == edgeC' jest __not__ valid w Swift. Jednak jeśli chcesz uniknąć krotek, których użyłem w moim kodzie, możesz napisać 'edgeA == edgeB && edgeB == edgeC'. –

24

Jeśli chcesz "tylko do odczytu" przechowywaną własność, użyj private(set):

private(set) var isEquilateral = false 

Jeśli jest to nieruchomość obliczane od innych właściwości, a następnie, tak, stosowanie obliczane nieruchomości:

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