我試圖在類型之間實現一個不平凡的(至少對於我的級別)關係。定義一個符合多個協議/協議+超類的變量
類A和B是一類MySuperClass的子類,和我讓他們實現協議「MyProtocol」
class MySuperclass {...}
protocol MyProtocol {
func myProtocolMethod()
}
class A:MySuperclass, MyProtocol {...}
class B:MySuperclass, MyProtocol {...}
我的類「容器」具有可變的x,它可以是一個實例的A或B
class Container {... var x:???? ....}
也許可以想象得到嗎?我的問題是,我希望我可以使用x作爲MyProtocol和MySuperclass。
就在今天,我解決了一個非常類似的問題this thread,我想我可以在這裏應用,但我沒有成功。
這個想法是聲明變量的類型,使其滿足約束<T where T:MySuperclass, T:MyProtocol>
,但我在哪裏放?我到目前爲止所嘗試過的一切都沒有真正意義上的失敗。
我試過,例如:
class Container<T where T:MySuperclass, T:MyProtocol>
class Container {... var x:T ...}
但我實例化和Container
分配T,和我這樣做時,我得到一個編譯錯誤:
class Container {... self.x = A() ....}
「A類是不可自由兌換到'T'「
但實際上它應該,因爲A滿足類型約束。
編輯:感謝arshajii's anwer我明白爲什麼這是不可能的。但我仍然需要知道如何解決我最初的問題。
我不知道泛型實際上是否是正確的方法。我想我並不需要一個類型變量,我需要的是類似於聚合類型的東西...
編輯2-我知道我可以通過實現一個子類來實現此目的。只是想知道是否還有其他方法。但再考慮一個子類似乎是最好的方法。
在此先感謝。
謝謝! (+1)現在我得到了那部分。但我仍然不知道如何解決我原來的問題:/也許我應該刪除Java標記,因爲該標記的解決方案需要Swift專業知識。 – Ixx