在 Swift GRDB 中,可以使用 'EncodableRecord' 协议来实现对象的编码和绑定,其中 'encode(to:)' 方法可以用于将对象编码为 SQLite 语句。如果要绑定对象的 primaryKey,可以在 'encode(to:)' 方法中使用 'encode(column:primaryKey)' 方法来指定 primaryKey 的值。

以下是一个示例:

import GRDB

struct Person: Codable, FetchableRecord, EncodableRecord {
    var id: Int64?
    var name: String
    var age: Int
    
    static let databaseTableName = 'persons'
    static let idColumn = Column('id')
    
    func encode(to container: inout PersistenceContainer) {
        container['name'] = name
        container['age'] = age
        if let id = id {
            container['id'] = id
        } else {
            container[primaryKeyColumn] = nil
        }
    }
}

let person = Person(id: nil, name: 'Tom', age: 20)
let encoded = try person.encode()
let statement = try db.makeUpdateStatement(table: Person.databaseTableName, row: encoded)
statement.bind(column: Person.idColumn, value: person.id)

在这个例子中,我们定义了一个 'Person' 结构体,并实现了 'EncodableRecord' 协议。在 'encode(to:)' 方法中,我们将 'id' 字段的值绑定到 SQLite 语句中。在使用 'makeUpdateStatement' 方法创建 SQLite 语句时,我们可以使用 'bind(column:value:)' 方法将 'id' 字段的值绑定到语句中。

Swift GRDB: 如何在 `encode(to:)` 方法中绑定 primaryKey

原文地址: https://www.cveoy.top/t/topic/oR93 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录