How to check for nil in while loop in Swift? I'm getting error on this:
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...   I'm currently using Xcode6-Beta7.
In Swift, if we define a variable to be an optional variable, in that case, this variable can have no value at all. If optional variable is assigned with nil , then this says that there is no value in this variable. To check if this variable is not nil, we can use Swift Inequality Operator != .
In Swift: nil is not a pointer, it's the absence of a value of a certain type. NULL and nil are equal to each other, but nil is an object value while NULL is a generic pointer value ((void*)0, to be specific). [NSNull null] is an object that's meant to stand in for nil in situations where nil isn't allowed.
Swift while LoopA while loop evaluates condition inside the parenthesis () . If condition evaluates to true , the code inside the while loop is executed. condition is evaluated again. This process continues until the condition is false .
You can exit a loop at any time using the break keyword. To try this out, let's start with a regular while loop that counts down for a rocket launch: var countDown = 10 while countDown >= 0 { print(countDown) countDown -= 1 } print("Blast off!")
The syntax of while allows for optional binding.  Use:
var view: UIView = self while let sv = view.superview {   count += 1   view = sv }   [Thanks to @ben-leggiero for noting that view need not be Optional (as in the question itself) and for noting Swift 3 incompatibilities]
Your code cannot compile. nil can only appear in optionals. You need to declare view with optional, var view: UIView? = self.superview. Then compare it with nil in the while-loop.
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 }   Or do a let binding, But it seems not necessary here, I think.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With