2014-09-04 10 views
15

Come verificare la presenza di nil nel ciclo while in Swift? Sto ricevendo errore su questo:Come verificare la presenza di `nil` in condizioni di ciclo while in 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... 

Attualmente sto usando Xcode6-Beta7.

+2

Sei sicuro che questo sia il codice completo? Stai assegnando la 'UIView?' Alla variabile 'UIView', che dovrebbe essere il primo e l'unico errore a questo codice. Prova a risolverlo con 'view = view.superview!'. –

risposta

0

Il codice non può compilare. nil può apparire solo in opzione. È necessario dichiarare view con opzionale, var view: UIView? = self.superview. Quindi confrontalo con nil nel ciclo 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 
} 

o fare un let vincolante, ma non sembra necessario qui, credo.

+2

"nil può apparire solo in opzioni." o qualsiasi tipo conforme a 'NilLiteralConvertible' – newacct

56

La sintassi di while consente il collegamento facoltativo. Usa:

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

[Grazie a @ Ben-Leggiero per notando che view Non bisogna essere Optional (come nella domanda stessa) e per annotare Swift 3 incompatibilità]

+0

Funziona ma 2. row dovrebbe essere 'while let super = view? .superview {'. Grazie, accetto l'altra risposta con una spiegazione. – user500

+0

Sistemato come indicato. – GoZoner

+1

È fantastico. Sono molto contento di sapere che esiste: D –

Problemi correlati