我想要做這樣的事情:如何在Swift中將泛型類型約束爲另一個泛型類型?
class Config<T> {
func configure(x:T)
// constraint B to be subclass of A
class func apply<A,B:A>(c:Config<A>, to:B) {
c.configure(to)
}
}
所以後來,例如,我可以申請配置到一個UILabel:
class RedViewConfig<T:UIView> : Config<T> {
func configure(x:T) {
x.backgroundColor = .redColor();
}
}
let label = UILabel()
Config.apply(RedViewConfig(), to:label)
或擴展配置類:
class RedLabelConfig<T:UILabel> : RedViewConfig<T> {
func configure(x:T) {
super.configure(x)
x.textColor = .redColor();
}
}
Config.apply(RedLabelConfig(), to:label)
我試圖做到這一點,但我無法約束類。所以我嘗試了協議和相關類型,但是當我重寫相關類型時,我發現問題(like this)。
謝謝!所以在這種情況下,似乎我不需要兩種類型。我不知道爲什麼我認爲我需要兩個。 無論如何,在某些情況下,您需要兩種不同的類型。 如果我能想到一個例子,我會更新答案。 :) –