gpt4 book ai didi

swift - 访问通用属性

转载 作者:行者123 更新时间:2023-11-28 10:03:17 24 4
gpt4 key购买 nike

在我的应用程序中,我使用了一个 CRUD 类,它使我能够使用泛型进行数据库操作。 创建函数如下所示:

func create<T: Storable>(_ object: T.Type, completion: ((T) -> ())?)

这允许我执行以下操作:

database.create(Restaurant.self, completion: nil)

现在,Storable 协议(protocol)有一个名为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”。我做错了什么?

最佳答案

在协议(protocol)声明中将您的属性添加为要求。

protocol Storable {
static var primaryKey: String {get}
}
extension Storable {
static var primaryKey: String {
get {
return "Storable"
}
}
}

否则你就没有多态性(正如你所观察到的)。

关于swift - 访问通用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57394980/

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