Vapor 2,Fluent模型子类

问题描述 投票:2回答:2

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

}

但有编译错误:

方法'make(for :)'在非final类'MongoObject'中必须返回Self以符合协议'Parameterizable'

swift vapor
2个回答
1
投票

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

解决方案非常简单,你不能在这里进行子类化。


0
投票

我可能为时已晚,但我遇到了完全相同的问题,我所要做的就是让课程最终完成。

方法'make(for :)'在非final类'MongoObject'中必须返回Self以符合协议'Parameterizable'

© www.soinside.com 2019 - 2024. All rights reserved.