swift - 在 Swift 类的泛型中使用协议(protocol)数组

标签 swift generics protocols

有什么方法可以使用协议(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/

相关文章:

ios - Swift4.2 : Why func gameDidEnd(_:) no need to use game parameter but still declare in the function?

ios - 如何在 DataProvider 类 Alamofire 函数 swift 中设置协议(protocol)函数未正确调用

javascript - 使用 Javascript 使用 HTTP 以外的协议(protocol)连接服务器

ios - JSON 数据显示在 viewDidAppear 上而不是 viewDidLoad 上

ios - 如何在不使用 Any BaseUIViewController 的情况下禁用所有 UIViewController 的暗模式?

Swift:无法将值 '(Bool, MCSession) -> Void' 分配给类型 '(Bool, MCSession!) -> Void!'

java - Java 中的泛型方法

java - 类型转换为嵌套在泛型类中的类

java - 如何在没有未经检查的分配的情况下从通用接口(interface)检索对象列表?

ios - Swift:打印时崩溃