我想创建一个协议和扩展,我将在三个不同的视图控制器中使用它来加载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。有没有办法实现这个目标?