我正在使用SwiftData进行SQLite访问。
https://github.com/mozilla-mobile/firefox-ios/blob/master/Storage/ThirdParty/SwiftData.swift
SwiftData是一个用Swift编码的SQLite包装器。在Swift 3.0和XCode 8之后,以下行被破坏。我对Swift很不满意,所以我很感激你帮助修复破碎的东西:
let text = UnsafePointer<Int8>(sqlite3_column_text(statement, index))
结果为:“'init'不可用:使用'withMemoryRebound(to:capacity:_)'暂时将内存视为另一种与布局兼容的类型。”
return Data(bytes: UnsafePointer<UInt8>(blob), count: Int(size))
结果为:“无法使用类型为'(UnsafeRawPointer?)'的参数列表调用'UnsafePointer'类型的初始值设定项”
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 {
结果:“变异操作符的左侧不可变:'..&lt;'返回不可变值“
所有帮助都得到了赞赏!
答案 0 :(得分:1)
sqlite3_column_int(statement, index)
会返回Int32
和
sqlite3_column_int(statement, index) != 0
是一个布尔值,因此返回值if无效
预期(可选)AnyObject
。您可以将整数包装进去
改为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
或任何其他整数类型。
有关其他问题,请参阅