有什么方法可以使用协议(protocol)的泛型数组吗? 例如,
/* I want to use protocol like below,
* but I can't because protocol is not concrete
* so cannot make array of it */
class MyClass<T where T:MyProtocol, T:[MyProtocol]> {
let result: T
}
protocol MyProtocol {
init(with: String)
}
class SpecialThing: MyProtocol {
let appleWatch: AppleWatch
init(with: String) {
self.appleWatch = AppleWatch(with)
}
}
class SampleClass {
func test {
typealias listCallback = (MyClass<[SpecialThing]>, NSError) -> ()
typealias oneCallback = (MyClass<SpecialThing>, NSError) -> ()
}
}
协议(protocol)的子类可以有一个对象或数组。 我认为“typealias”对我没有帮助。
我想找到更简单的方法......
最佳答案
我的第一个问题是类型签名错误:
class MyClass<T where T:MyProtocol, T:[MyProtocol]>
这和做的是同一类型的事情:
let t: String
let t: [String]
t = String("foo")
编译器会报错,因为你正在重新定义 T
,一次作为 MyProtocol
,另一次作为 MyProtocol
的数组。你不能同时拥有两者,你只能拥有一个。
关于swift - 在 Swift 类的泛型中使用协议(protocol)数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286167/