"_" не конвертируется в Int32 - Swift
Получаю эту ошибку и не понимаю почему.
Эта строка ниже работает. Обратите внимание, что settingVersion и settingRelease являются строками:
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease)
Но если я добавлю Int32 в микс, где settingsTimesUsed - Int32, я получу, что "_" не преобразуется в ошибку Int32.
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingRecord.settingTimesUsed])
Я также получаю ту же ошибку, если я делаю последний элемент полностью явным как Int32, например
let a = 1 as Int32
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, a])
Есть идеи.
2 ответа
Добавление Int32
пытается переместить это из [String]
в [AnyObject]
, Свифт никогда не выведет автоматически Any
или же AnyObject
, Вы должны сделать это явным, если вам это нужно. В этом случае это будет:
let settings: [AnyObject] = [settingRecord.settingVersion, settingRecord.settingRelease, settingRecord.settingTimesUsed]
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: settings)
Тем не менее, я хотел бы убедиться, что вы действительно хотите этого. Это выбрасывает безопасность типа в беге executeUpdate
,
Если это интерфейс ObjC (который обычно небезопасен), то он, вероятно, на самом деле занимает NSArray
, В этом случае вы можете просто указать это, вызвав:
...withArgumentsInArray: NSArray(objects: settingRecord.settingVersion, settingRecord.settingRelease, settingRecord.settingTimesUsed))
Если вы хотите сохранить безопасность типов других переменных, вместо того, чтобы приводить весь массив к AnyObject, вы можете просто привести эту конкретную переменную к строке, чтобы обойти эту проблему.
Например
let settingTimesUsedString = String(settingRecord.settingTimesUsed)
let isInserted = sharedInstance.database!.executeUpdate(sqlStatement, withArgumentsInArray: [settingRecord.settingVersion, settingRecord.settingRelease, settingTimesUsedString])