Подтвердить что ты не робот

Преобразование Swift 3 получает 'Int1' не конвертируется в 'Bool'

Я конвертирую код Swift 2, который компилируется и запускается в Swift 3, и я получаю следующую ошибку:

'Int1' не конвертируется в '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;

При компиляции моего кода над ним флаг "(coinInfo.grade! =" и дает ошибку.

Я попробовал упростить его, чтобы убедиться, что это все равно произойдет:

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

и по-прежнему получить ту же ошибку, на этот раз он обозначает "true".

Скриншот ошибки

Я сделал кучу поисков по этому вопросу и не нашел ничего близкого, кроме https://bugs.swift.org/browse/SR-2372, но это проблема с кортежами, которые я бы не использовал, t думаю, повлияет на мой код.

Может ли кто-нибудь пролить свет на это или предложить обходной путь, если это ошибка компилятора?

Спасибо

4b9b3361

Ответ 1

Как вы сами написали, ваша проблема такая же, как описанная здесь здесь. Ошибки происходят))

Почему бы просто не использовать временную переменную для ее исправления:

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])