繁体   English   中英

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

[英]Simplified typealias for generic swift types

我有一个看起来像这样的缓存实现:

class Cache<Key: Hashable, Value> {}

它主要(但不总是)用于缓存可识别的东西,我的实例化通常看起来像:

struct User: Identifiable { var id: String }

var userCache = Cache<User.ID, User>()

我很好奇是否可以编写类型别名或其他提供语法糖并允许实例化的定义,例如:

var userCache = Cache<User>()

然后我可以在内部使用Value.ID作为键。

我试过类型别名:

typealias Cache<Value: Identifiable> = Cache<Key = Value.ID, Value> // (Syntax error)

和第二个 class 定义:

class Cache<Value: Identifiable> {}

class Cache<Key: Hashable, Value> {} // (Invalid redeclaration)

我想保留基本定义的灵活性,同时缓存不可识别的内容。 这在 Swift 中可能吗?

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

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

你不能用不同数量的 arguments 重载泛型类型,就像你可以使用函数一样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM