gpt4 book ai didi

ios - SwiftData(SQLite 包装器)在 Swift 3.0 中损坏

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:44 24 4
gpt4 key购买 nike

我正在使用 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 {

结果为:“变异运算符的左侧不可变:‘..<’返回不可变值”

感谢所有帮助!

最佳答案

sqlite3_column_int(statement, index) 返回一个 Int32

sqlite3_column_int(statement, index) != 0

是一个 bool 值,所以如果返回值没有意义需要一个(可选的)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 中,anything 可以转换为 AnyObject。不同的是,在第二种解决方案中,对象只能是转换回原始数字类型 Int32,但不转换为Int 或任何其他整数类型。

其他问题见

关于ios - SwiftData(SQLite 包装器)在 Swift 3.0 中损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40380068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com