如果我创建协议...
protocol MyProtocol {
var someArray: [String] { get }
init(someArray: [String])
func adding(_ other: Self) -> Self
}
extension MyProtocol {
func adding(_ other: Self) -> Self {
return Self(someArray: someArray + other.someArray)
}
}
然后我可以创建一个符合它的结构...
struct Foo: MyProtocol {
let someArray: [String]
}
现在我可以创建两个Foos
并将它们加在一起。
但是,如果我创建了另一个符合MyProtocol
...
struct Bar: MyProtocol {
let someArray: [String]
}
那么现在我做不到...
let foo = Foo(["Hello", "World"])
let bar = Bar(["Goodbye"])
let fooBar = foo.adding(bar)
因为该功能要求other
的类型与您在功能上运行的类型相同。
是否有可能没有此限制?只要它们都符合MyProtocol
?
思想
嗯...也许我正在考虑以错误的方式解决这个问题?我想我可以通过从函数的输入参数中删除Self
要求来解决此问题,而仅将[String]
用作输入参数。
您的问题是Self
要求。但是您不需要它,至少在争论方面不需要。您只需要符合MyProtocol
的东西,以便您可以从中取someArray
并创建Self
的新实例:
protocol MyProtocol {
var someArray: [String] { get }
init(someArray: [String])
func adding(_ other: MyProtocol) -> Self
}
extension MyProtocol {
func adding(_ other: MyProtocol) -> Self {
return Self(someArray: someArray + other.someArray)
}
}