2014-06-12 17 views
5

voglio verificare se la mia mittente è un Xyz-ObjectSwift: Confronta ANYOBJECT con `is` Sintassi

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

ma ottengo l'errore seguente:

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

+0

quale linea causare l'errore? –

+0

Errore del compilatore sulla seconda riga –

risposta

3

L'espressione sender is Xyz restituisce un Bool seconda se sender è di tipo Xyz. Sembra che ci sia un bug del compilatore per cui sender is Xyz è in realtà la restituzione di un Int1 che non è sempre costretto internamente per un Bool.

Una soluzione è:

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

questo spiega cosa fa il codice, ma perché non è riuscito a compilare? –

+0

@BryanChen cosa succede se si contrassegna esplicitamente la costante come, variamente, 'Int1' o' Bool'? GoZoner probabilmente scrive di un bug di inferenza del compilatore, ma questo potrebbe aiutare a rendere l'ipotesi più dettagliata. – Tommy

+0

@BryanChen Bug del compilatore. – Kevin

2

si può anche cambiare a

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

Soluzioni alternative non sono necessari più con la versione beta 3 e si possono combinare l'operatore is con altri operatori logici .

Problemi correlati