2014-09-04 15 views
15

Làm thế nào để kiểm tra nil trong khi vòng lặp trong Swift? Tôi nhận được lỗi về điều này:Làm thế nào để kiểm tra `nil` trong khi điều kiện vòng lặp trong 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... 

Tôi hiện đang sử dụng Xcode6-Beta7.

+2

Bạn có chắc đây là mã hoàn chỉnh không? Bạn đang gán 'UIView?' Cho biến 'UIView', đó phải là lỗi đầu tiên và duy nhất tại mã này. Cố gắng sửa nó bằng 'view = view.superview!'. –

Trả lời

0

Mã của bạn có thể không biên dịch. nil chỉ có thể xuất hiện trong các tùy chọn. Bạn cần khai báo view với tùy chọn, var view: UIView? = self.superview. Sau đó, so sánh nó với nil trong vòng lặp 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 
} 

Hoặc làm một let ràng buộc, Nhưng có vẻ như không cần thiết ở đây, tôi nghĩ.

+2

"nil chỉ có thể xuất hiện trong các tùy chọn". hoặc bất kỳ loại nào phù hợp với 'NilLiteralConvertible' – newacct

56

Cú pháp while cho phép ràng buộc tùy chọn. Sử dụng:

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

[Nhờ @ ben-leggiero cho lưu ý rằng view không cần phải được Optional (như trong câu hỏi chính nó) và ghi nhận Swift 3 không tương thích]

+0

Hoạt động nhưng 2. hàng phải là 'trong khi cho phép super = view? .superview {'. Cảm ơn bạn, tôi chấp nhận câu trả lời khác với lời giải thích. – user500

+0

Đã sửa lỗi như đã lưu ý. – GoZoner

+1

Đó là siêu mát mẻ. Tôi rất vui khi biết điều này tồn tại: D –

Các vấn đề liên quan