SwiftData (оболочка SQLite), разбитая на Swift 3.0

Я использую SwiftData для доступа SQLite.

https://github.com/mozilla-mobile/firefox-ios/blob/master/Storage/ThirdParty/SwiftData.swift

SwiftData – это оболочка SQLite, закодированная в Swift. После Swift 3.0 и XCode 8 нарушаются следующие строки. Я вроде noobie с Swift, поэтому я был бы признателен за вашу помощь в исправлении того, что сломано:

let text = UnsafePointer<Int8>(sqlite3_column_text(statement, index)) 

результатов: «'init' недоступен: используйте 'fromMemoryRebound (to: capacity: _)', чтобы временно просматривать память как другой тип совместимого с макетами."

 return Data(bytes: UnsafePointer<UInt8>(blob), count: Int(size)) 

результатов: «Невозможно вызвать инициализатор для типа« UnsafePointer »с списком аргументов типа (UnsafeRawPointer?)»

 return sqlite3_column_int(statement, index) != 0 

результаты: «'! =' производит« Bool », а не ожидаемый контекстный тип результата« AnyObject? »»

 let text = UnsafePointer<Int8>(sqlite3_column_text(statement, index)) 

Результаты: «'init' недоступен: используйте 'withMemoryRebound (to: capacity: _)', чтобы временно просматривать память как другой тип совместимого с макетами."

 for i: Int32 in 0 ..< columnCount += 1 { 

Результаты: «Левая сторона оператора мутации не изменена:« .. <'возвращает неизменяемое значение »

Все приветствуются!

sqlite3_column_int(statement, index) возвращает Int32 и

 sqlite3_column_int(statement, index) != 0 

является логическим значением, поэтому это не имеет смысла в качестве возвращаемого значения, если ожидается (необязательный) AnyObject . NSNumber этого вы можете обернуть целое число в NSNumber :

 func getColumnValue(_ statement: OpaquePointer, index: Int32, type: String) -> AnyObject? { let val = sqlite3_column_int(statement, index) return NSNumber(value: val) } 

Другим вариантом будет

 func getColumnValue(_ statement: OpaquePointer, index: Int32, type: String) -> AnyObject? { return sqlite3_column_int(statement, index) as AnyObject } 

потому что в Swift 3 все может быть преобразовано в AnyObject . Разница в том, что во втором решении объект может быть преобразован обратно только в исходный тип номера Int32 , но не в Int или какой-либо другой целочисленный тип.

Для других проблем см.

  • Проблема с UnsafePointer <Uint8> в проекте SQLite в Swift
  • Ошибка для цикла CGFloat