问题描述
首先我知道 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 (将#修改为@)