2014-06-12 10 views
5

Ich möchte überprüfen, ob mein Absender ein Xyz-Objekt istSwift: Vergleichen ANYOBJECT mit `is` Syntax

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

aber ich folgende Fehlermeldung erhalten:

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

+0

Welche Zeile verursacht den Fehler? –

+0

Compiler-Fehler in der zweiten Zeile –

Antwort

3

Der Ausdruck sender is Xyz kehrt ein Bool je nachdem, ob sender vom Typ Xyz ist. Es scheint, dass es einen Compilerfehler gibt, bei dem sender is Xyz tatsächlich eine Int1 zurückgibt, die intern nicht zu einem Bool gezwungen wird.

Eine Abhilfe ist:

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

dies erklärt, was der Code tut, aber warum es kompiliert? –

+0

@BryanChen Was passiert, wenn Sie die Konstante explizit als "Int1" oder "Bool" kennzeichnen? GoZoner schreibt wahrscheinlich über einen Compiler-Inferenz-Bug, aber das könnte helfen, die Schätzung detaillierter zu machen. – Tommy

+0

@BryanChen Compiler-Fehler. – Kevin

2

Sie können auch ändern

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

Umgehungen werden nicht mehr mit der Beta 3 Release erforderlich und Sie können den is Operator mit anderen logischen Operatoren kombinieren .

Verwandte Themen