我正在用 Swift 撰寫自己的 SQLite 包裝器,我想知道是否可以制作 SQLite 陳述句,Sendable或者將其制作成actor.
import SQLite
struct Statement: Sendable {
private(set) var handle: OpaquePointer?
init(sql: String, connection: OpaquePointer) {
sqlite3_prepare_v2(connection, sql, -1, &handle, nil)
}
public func finalize() {
guard let handle else { return }
sqlite3_finalize(handle)
}
}
// Resulting in
let connection: OpaquePointer = ...
let statement = Statement(sql: "", connection: connection)
statement.finalize()
或者使用演員實作
import SQLite3
actor Statement {
private(set) var handle: OpaquePointer?
init(sql: String, connection: OpaquePointer) {
sqlite3_prepare_v2(connection, sql, -1, &handle, nil)
}
public func finalize() {
guard let handle else { return }
sqlite3_finalize(handle)
}
}
// Resulting in
let connection: OpaquePointer = ...
let statement = Statement(sql: "", connection: connection)
await statement.finalize()
我主要是好奇如何Sendable影響. SQLite 語法讓我相信它是按參考傳遞的,即使我假設一個陳述句可以或應該按值傳遞,因此我的協議。我只是不確定這是否可行。OpaquePointeractorOpaquePointerstruct Statement: Sendable
uj5u.com熱心網友回復:
根據定義, AnOpaquePointer是參考型別(因為它是 C 指標)。
關于通過 Actor 提供同步,SQLite 具有三種執行緒模式,iOS 默認是安全地使用來自多個執行緒的資料庫連接,但不能同時使用。所以,是的,你會想要使用演員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524221.html
