來概括我試圖創造斯威夫特時,Xcode 7.3(所以雨燕2.2)廣義類,但我似乎無法得到它過去的編譯器:試圖在迅速
protocol Struct1Protocol {
}
struct Struct1 {
var name1: String
}
protocol Struct2Protocol {
}
struct Struct2: Struct2Protocol {
var name2: String
}
class StructDependent<T> {
func setupFrom<T:Struct1Protocol>(value: T) {
print("we want to setup StructDependent with struct 1")
}
func setupFrom<T:Struct2Protocol>(value: T) {
print("we want to setup StructDependent with struct 2")
}
}
class A<T> {
func test(value: T) {
let structInstance = StructDependent<T>()
// this gives a compiler error:
// Cannot invoke 'setupFrom' with an argument list of type '(T)'
structInstance.setupFrom(value)
}
}
的想法是有一個StructDependent
可以從不同的結構設置。如果類已經用兼容的結構體實例化,則類A應該能夠調用setupFrom。像這樣:
let a = A<Struct1>()
let v = Struct1(name1: "")
a.test(v)
我該怎麼辦呢?我在這裏有點受阻,所以所有想法都是受歡迎的。
我不知道那是怎麼回事,一定是在我的複製粘貼緩衝區裏意外。我將示例代碼更正爲我在Xcode中使用的代碼。 –
好吧,但它仍然是一個問題。沒有關於'value:T'的信息告訴編譯器'T'採用了Struct1Protocol或Struct2Protocol。那麼如何在需要Struct1Protocol或Struct2Protocol的地方使用呢? – matt
爲什麼沒有Struct1和Struct2採用_ same_協議?這樣你可以輸入'value:T'作爲採用該協議。 – matt