2014-06-12 19 views
5

tôi muốn kiểm tra xem người gửi tôi là một XYZ-ObjectSwift: So sánh AnyObject với `is` Cú pháp

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
let senderIsBonusProduct = sender is Xyz 

nhưng tôi nhận được lỗi sau:

Could not find a user-defined conversion from type 'Int1' to type 'Bool'

+0

dòng nào gây ra lỗi? –

+0

Trình biên dịch-Lỗi trên dòng thứ hai –

Trả lời

3

Khái niệm sender is Xyz được trả lại một Bool tùy thuộc vào nếu sender thuộc loại Xyz. Có vẻ như có lỗi trình biên dịch theo đó sender is Xyz thực sự trả về một số Int1 không bị ép buộc nội bộ vào một số Bool.

Một cách giải quyết là:

let bonus = (sender is Xyz ? true : false) 
+2

giải thích mã này làm gì, nhưng tại sao nó không biên dịch được? –

+0

@BryanChen điều gì xảy ra nếu bạn gắn cờ rõ ràng hằng số, khác nhau, 'Int1' hoặc' Bool'? GoZoner có thể viết về một lỗi suy luận trình biên dịch nhưng điều đó có thể giúp làm cho đoán chi tiết hơn. – Tommy

+0

@BryanChen Lỗi trình biên dịch. – Kevin

2

Bạn cũng có thể thay đổi nó để

if let senderOfTypeXYZ = sender as? Xyz { 
    // senderOfTypeXYZ is available with the expected type here 
} 
0

Cách giải quyết là không cần thiết nữa với việc phát hành bản Beta 3 và bạn có thể kết hợp các nhà điều hành is với toán tử logic khác .

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