通用swift类型的简化类型别名

62lalag4  于 2023-01-29  发布在  Swift
关注(0)|答案(1)|浏览(143)

我有一个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中可行吗?

x0fgdtte

x0fgdtte1#

您可以使用泛型类型别名,但需要使用不同的名称:

typealias IdentityCache<T: Identifiable> = Cache<T.ID, T>

不能像重载函数那样重载具有不同数目参数的泛型类型

相关问题