协议扩展中的关联类型

时间:2017-03-14 21:39:19

标签: swift generics swift-protocols swift-extensions

我想创建一个协议和扩展,我将在三个不同的视图控制器中使用它来加载API。

protocol WebAPILoader {

    // URL of remote resource
    var url: URL? { get set }

    // Array supposed to store loaded data.    
    associatedtype T
    var data: [T] { get set }

    // Function loading them
    func loadNextPage()
}

每个VC使用其端点下载不同的数据,因此我希望我的函数根据数据类型选择要使用的端点,如下所示:

extension WebAPILoader {

    mutating func loadNextPage() {

        guard let url = self.nextURL else {
            return
        }

        let dataType = type(of: data)
        var endpointLoader: ((URL?, @escaping (dataType? ,URL?, Error?) -> Void) -> ())? = nil

        switch data {
        case is [DataType1]:
            endpointLoader = DataType1().getData

        // Other cases...

        default:
            return
        }


        // EndpointLoader usage...
    } 
}

但Xcode一直告诉我各种错误,禁止我在我的扩展中使用T作为Type。有没有办法实现这个目标?

0 个答案:

没有答案