[英]Swift Generic Type Constraint with or operator
我正在嘗試將泛型類型僅限於類型的協議保存到 UserDefaults。
是否可以具有符合特定類型或其他特定類型的類型約束?
例如下面的代碼有效。
public protocol UserDefaultsRequestType {
associatedtype ValueToSet where ValueToSet == URL
var valueToSet: ValueToSet { get }
}
我想要實現的東西就像打擊
public protocol UserDefaultsRequestType {
// Value should either be a type URL, String or Bool
associatedtype ValueToSet where ValueToSet == URL || ValueToSet == String || ValueToSet == Bool
var valueToSet: ValueToSet { get }
}
這看起來更像 XOR,因為變量不能同時是URL
和String
,但要回答您的問題,您不能這樣做!
但我想你已經知道了,因為編譯器可能告訴你:
一行中的連續聲明必須用';'分隔
但是,如果您希望ValueToSet
為URL
、 String
或Bool
,這應該是因為這 3 種類型具有您需要的共同點,這意味着符合protocol
或來自基礎inheritance
的 ZA2F2ED4F8EBC1CBB1DZC2。
您提供的 3 種類型符合
因此,假設您希望能夠將它們用作Dictionary
中的鍵,您可以編寫:
associatedtype ValueToSet where ValueToSet: Hashable
這意味着ValueToSet
可以是符合Hashable
的任何類型。
但是由於您似乎正在使用UserDefaults
並且設置默認值的公共方法不使用protocols
或類。
例如:
func set(_ url: URL?, forKey defaultName: String)
這種方法不會讓您走得太遠, Sweeper提出的方法可能最適合您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.