gpt4 book ai didi

swift - Vapor 2,Fluent 模型子类

转载 作者:可可西里 更新时间:2023-11-01 02:00:53 27 4
gpt4 key购买 nike

我正在使用 Vapor 2 并尝试创建非最终模型来对其进行子类化。可能吗?我有以下抽象模型代码:

class MongoObject: Model, JSONRepresentable {

let storage = Storage()

let creationDate: Date

init() {
creationDate = Date()
}

required init(row: Row) throws {
creationDate = try row.get(KeyPath.creationDate)
}

func makeRow() throws -> Row {
var row = Row()
try row.set(KeyPath.creationDate, creationDate)
return row
}

func makeJSON() throws -> JSON {
var json = JSON()
try json.set(KeyPath.id, id)
try json.set(KeyPath.creationDate, creationDate)
return json
}

}

extension MongoObject: Preparation {

class func prepare(model: Creator) { }

static func prepare(_ database: Database) throws {
try database.create(self) { (builder) in
builder.id()
builder.date(KeyPath.creationDate)
prepare(model: builder)
}
}

static func revert(_ database: Database) throws {
try database.delete(self)
}

}

但出现编译错误:

method 'make(for:)' in non-final class 'MongoObject' must return Self to conform to protocol 'Parameterizable'

最佳答案

您的带有子类的非最终“抽象”模型符合 Parameterizable 作为 Model 一致性的一部分。可参数化需要返回 Self。默认情况下,这是通过从路径组件中读取实体的 id 来实现的。您现在遇到的问题是编译器无法为子类返回 Self,因为它是在更高模型上实现的。

解决方案非常简单,您不能在此处进行子类化。

关于swift - Vapor 2,Fluent 模型子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46424346/

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