swift (Vapor) 中的最终类和继承

问题描述

首先我知道 final 类的目的:没有其他类应该继承它。它还提供了一些额外的速度,因为编译器可以进行直接调用

我正在用 Swift 网络框架 Vapor 编写一个项目。我想把项目拆分成可重用的模块,这样我就可以在以后的项目中使用它们,并且可以更轻松地维护它们。这些模块之一是 usermodel。 usermodel 的实现在数据库中创建一个表,将演示用户播种到表中,进行身份验证... 我想保持模型尽可能纯净,只添加用户名和密码作为变量

class usermodel  {
    var userName: String
    var password : String 

    some functions...
}

当时我的计划是在我的项目中创建一个继承自 usermodel 的 User 模型:

class User : usermodel {
   var language : String
   var companyName : String
   ...
}

添加特定于此项目的变量(并在此处使用迁移将额外字段添加数据库,覆盖演示用户播种功能...

到目前为止一切顺利,对我来说似乎是合乎逻辑的一种好方法

然而,Vapor 要求我采用 usermodel 的 Content 协议

final class usermodel {
   ...
}

并采用该协议要求我将 usermodel 类设为 final! (或者我最终会出现编译器错误Protocol 'RequestDecodable' 要求 'decodeRequest' 不能被非最终类('usermodel')满足,因为它在非参数中使用了 'Self',非-结果类型位置

所以我最终得到:

final class usermodel

我不能继承

有人可以给我指出一种不是继承的方法,我仍然可以保留一个简单的可重用 usermodel 但为此项目添加特定字段... 我正在寻找一种以一种很好的、​​结构化的方式来实现这一点的方法,而不是一种 hack ......(除非它是一个可以接受的 hack ;))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...