2016-09-17 3 views
13

Ich Swift 2-Code umgewandelt werden, die und führt zu Swift kompiliert 3 und sind die folgenden Fehler erhalten:Swift 3 Umwandlung bekommt ‚Int1‘ ist nicht konvertierbar zu ‚Bool‘

'Int1' is not convertible to 'Bool'

Der Code ist wie folgt :

isUpdated = sharedInstance.database!.executeUpdate(
"UPDATE Coin_Table SET upgrade=?, grade=?, WHERE coin_id=?", 
withArgumentsInArray: [ 
coinInfo.upgrade, (coinInfo.grade != nil) ? coinInfo.grade! : NSNull(), 
coinID]) 

der obige Code mit dem Verfahren in FMDB.h definiert wird FMDB als

- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments; 

Wenn mein Code abov Kompilieren e es markiert die "(coinInfo.grade! =" und gibt den Fehler.

ich es versucht zu vereinfachen, um zu sehen, ob es noch passieren würde:

let theArray: NSArray = [true ? "foo" : NSNull()] 

und immer noch die gleichen Fehler, dieses Mal ist es Fahnen, die „true“.

Screenshot of error

Ich habe eine Reihe von Suchanfragen auf diese getan und haben nichts in der Nähe andere als https://bugs.swift.org/browse/SR-2372 fand aber, dass es ein Problem mit Tupeln, die ich meinen Code nicht denken würde, würde beeinflussen.

Kann jemand etwas Licht darauf werfen oder eine Abhilfe vorschlagen, wenn es ein Compiler Bug ist?

Dank

+0

'Builtint.Int1' ist die interne Darstellung des' Bool' struct ('_value' Eigenschaft der Struktur) und dass dieser Typ in einer Fehler-/Warnmeldung auftaucht, weist im Allgemeinen auf nicht beabsichtigtes Verhalten des Compilers hin. Es sieht so aus, als ob der Fehlerbericht, den Sie verlinken, auch dieses Verhalten erklärt. Der Compiler kann den Typ des Ergebnisses der ternären Operation nicht ableiten. Z.B. Wenn Sie das String-Literal verwenden, um eine 'NSString'-Instanz explizit zu initialisieren (statt dem Compiler zu vertrauen), wird der Fehler umgangen (' theArray: NSArray = [true? NSString (string: "foo"): NSNull()] '). – dfri

+0

Danke für den Kommentar. Ich hatte tatsächlich den tatsächlichen Code vereinfacht, den ich für das Stellen meiner Frage verwendete, da ich mehrere Einsätze auf der gleichen Linie hatte, so dass diese Methode für mich etwas unhandlich gewesen wäre. Ging mit dem Temp vars Ansatz unten. – KevinR

Antwort

4

Wie Sie selbst Ihr Problem ist das gleiche geschrieben wie eine Eins here beschrieben. Bugs geschieht))

Warum nicht einfach eine temporäre Variable zu verwenden, um es zu beheben:

let hasGrade: Any = (coinInfo.grade != nil) ? coinInfo.grade! : NSNull() 
isUpdated = sharedInstance.database!.executeUpdate(
"UPDATE Coin_Table SET upgrade=?, grade=?, WHERE coin_id=?", 
withArgumentsInArray: [ 
coinInfo.upgrade, hasGrade, 
coinID]) 
+0

Danke, das hat mich über das Problem gebracht, hatte noch nie "Any" benutzt. – KevinR

+0

Manchmal wird dieser Fehler angezeigt, wenn Sie einen anderen Fehler in Ihrem Code haben. Ich war verwirrt darüber, aber ich fand später heraus, dass es einen weiteren Fehler in dieser Zeile gab, den xcode nicht meldete, und als ich das reparierte, ging dieser Fehler weg. – csga5000

Verwandte Themen