【发布时间】:2019-08-07 12:53:47
【问题描述】:
在我的应用程序中,我使用了一个 CRUD 类,它使我能够使用泛型进行数据库操作。 create函数如下所示:
func create<T: Storable>(_ object: T.Type, completion: ((T) -> ())?)
这允许我执行以下操作:
database.create(Restaurant.self, completion: nil)
现在,Storable 协议有一个名为 primaryKey 的属性。但是,当我尝试在 create 函数中访问它时,它总是将默认值传递给我。
protocol Storable {
}
extension Storable {
static var primaryKey: String {
get {
return "Storable"
}
}
}
class Restaurant: Storable {
override public class var primaryKey: String {
return "uuid"
}
}
...
class Database {
public func create<T: Storable>(_ object: T.Type, completion: ((T) -> ())?) {
print("Primary key: ", object.primaryKey)
print("T: ", type(of: T.init()))
}
}
上面将打印以下内容:
Primary key: Storable
T: Storable
显然,主键应该是“uuid”。我做错了什么?
【问题讨论】: