2016-09-17 86 views
13

我將斯威夫特2的代碼,編譯和運行斯威夫特3和正在以下錯誤:斯威夫特3換算,得到「INT1」是無法轉換爲「布爾」

'Int1' is not convertible to 'Bool'

的代碼如下:

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

上面的代碼使用FMDB與FMDB.h定義的方法爲

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

當編譯我的代碼ABOV它標記「(coinInfo.grade!=」並給出錯誤。

我試圖簡化它,看看是否仍然會發生的:

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

,仍然得到了同樣的錯誤,這一次標誌的「真」。

Screenshot of error

我已經做了一堆關於這個搜索,並沒有發現任何接近以外https://bugs.swift.org/browse/SR-2372但是這是與我不認爲會影響到我的代碼元組的問題。

任何人都可以點亮這個或建議一個解決方法,如果它是一個編譯器錯誤?

感謝

+0

'Builtint.Int1'是'Bool'結構的內部表示('struct的_value'屬性) ,並且此類型彈出錯誤/警告消息通常指向編譯器的非預期行爲。看起來好像你鏈接的錯誤報告也可以解釋這種行爲>編譯器不能推斷三元操作結果的類型。例如。使用字符串字面值顯式初始化一個'NSString'實例(而不是信任編譯器)將繞過該錯誤('let theArray:NSArray = [true?NSString(string:「foo」):NSNull()]')。 – dfri

+0

感謝您的評論。我實際上已經簡化了我用於發佈我的問題的實際代碼,因爲我在同一行上有多個插入,所以這種方法對我來說會有點不便。以下采用臨時變量方法。 – KevinR

回答

4

當你自己寫你的問題是一樣的一個描述here。錯誤發生))

爲什麼不直接使用一個臨時變量來解決這個問題:

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

謝謝,這讓我過去了這個問題,以前沒有用過「任何」。 – KevinR

+0

有時,當你的代碼有不同的錯誤時,這個錯誤就會顯示出來。我對此感到困惑,但後來我發現xcode並沒有報告這個行上有另一個錯誤,當我修復這個錯誤時,這個錯誤消失了。 – csga5000