2014-09-04 7 views
15

Jak sprawdzić dla nil w pętli while w Swift? Otrzymuję komunikat o błędzie:Jak sprawdzić, czy `nil` w stanie pętli while w Swift?

var count: UInt = 0 
var view: UIView = self 
while view.superview != nil { // Cannot invoke '!=' with an argument list of type '(@lvalue UIView, NilLiteralConvertible)' 
    count++ 
    view = view.superview 
} 
// Here comes count... 

Aktualnie używam Xcode6-Beta7.

+2

Czy jesteś pewien, że to kompletny kod? Przypisujesz 'UIView?' Do zmiennej 'UIView', która powinna być pierwszym i jedynym błędem w tym kodzie. Spróbuj naprawić to za pomocą 'view = view.superview!'. –

Odpowiedz

0

Twój kod nie może skompilować. nil może pojawić się tylko w opcjach. Musisz zadeklarować view z opcjonalnym, var view: UIView? = self.superview. Następnie porównaj go z nil w pętli while.

var count: UInt = 0 
var view: UIView? = self.superview 
while view != nil { // Cannot invoke '!=' with an argument list of type '(@lvalue UIView, NilLiteralConvertible)' 
    count++ 
    view = view!.superview 
} 

Albo zrobić let wiążący, ale nie wydaje się konieczne tutaj, myślę.

+2

"zero może pojawić się tylko w opcjach." lub dowolny typ zgodny z 'NilLiteralConvertible' – newacct

56

Składnia while umożliwia opcjonalne powiązanie. Zastosowanie:

var view: UIView = self 
while let sv = view.superview { 
    count += 1 
    view = sv 
} 

[Dzięki @ ben-leggiero dla zauważając, że view nie musi być Optional (jak w samej kwestii) i zauważając Swift 3 niezgodności]

+0

Działa, ale 2. wiersz powinien być 'while while super = view? .superview {'. Dziękuję, akceptuję inną odpowiedź z wyjaśnieniem. – user500

+0

Naprawiono to tak, jak to zaznaczono. – GoZoner

+1

To jest super fajne. Bardzo się cieszę, że to wiem: D –

Powiązane problemy