簡體   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