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“.
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
'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
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