我有一个Cache实现,如下所示:
class Cache<Key: Hashable, Value> {}
它主要(但不总是)用于缓存可识别的内容,我的示例化通常如下所示:
struct User: Identifiable { var id: String }
var userCache = Cache<User.ID, User>()
我很好奇是否有可能编写一个typealias或其他定义,提供语法糖并允许如下示例化:
var userCache = Cache<User>()
然后我可以在内部使用Value.ID
作为Key。
我试过一个类型别名:
typealias Cache<Value: Identifiable> = Cache<Key = Value.ID, Value> // (Syntax error)
和第二类定义:
class Cache<Value: Identifiable> {}
class Cache<Key: Hashable, Value> {} // (Invalid redeclaration)
我想保留基本定义的灵活性,同时缓存不可识别的内容,这在Swift中可行吗?
1条答案
按热度按时间x0fgdtte1#
您可以使用泛型类型别名,但需要使用不同的名称:
不能像重载函数那样重载具有不同数目参数的泛型类型