Как проверить условие `nil` во время цикла в Swift?

Как проверить nil во время цикла в 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...

В настоящее время я использую Xcode6-Beta7.

Ответ 1

Ваш код не может компилироваться. nil может отображаться только в опциях. Вам нужно объявить view с опцией var view: UIView? = self.superview. Затем сравните его с nil в цикле 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
}

Или сделайте привязку let, но, похоже, это не так необходимо.

Ответ 2

Синтаксис while допускает необязательное связывание. Использование:

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

[Спасибо @ben-leggiero за то, что view не обязательно должен быть Optional (как в самом вопросе) и для замещения несовместимости Swift 3]