2014-09-04 63 views
15

如何在Swift中檢查while循環中的nil?我得到這個錯誤:如何在Swift的while循環條件中檢查`nil`?

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... 

我目前正在使用Xcode6-Beta7。

+2

你確定這是完整的代碼嗎?您正在將'UIView?'分配給'UIView'變量,這應該是此代碼中的第一個也是唯一的錯誤。試着用'view = view.superview!'來解決它。 – 2014-09-04 13:51:04

回答

0

您的代碼無法編譯。 nil只能出現在可選項中。 您需要聲明view可選,var view: UIView? = self.superview。 然後在while循環中將其與nil進行比較。

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 
} 

或做一個let綁定,但我認爲這似乎沒有必要。

+2

「零隻能出現在可選項中。」或者符合'NilLiteralConvertible'的任何類型 – newacct 2014-09-04 19:01:29

56

while的語法允許可選的綁定。用途:

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

[感謝@奔leggiero用於提的是view不必Optional(如問題本身)和斯威夫特指出不兼容性3]

+0

工作,但2.行應該'而讓超級=查看?。超級查看{'。謝謝,我接受另一個答案並解釋。 – user500 2014-09-04 18:58:09

+0

如上所述修正了它。 – GoZoner 2014-09-04 22:35:54

+1

這是超級酷。我很高興知道這存在:D – 2016-11-18 16:59:57