Swift - 声明一系列泛型

时间:2016-01-04 15:42:42

标签: ios arrays swift generics

我正在努力在Swift中创建一系列泛型。 这是我的协议/类。

public protocol InitializableWithData {
    init(data: NSData?) throws 
}

internal struct RequestWithCompletionHandler<T: InitializableWithData> {
    let request: APIRequest<T>
    let completionHandler: ((response: APIResponse<T>?, error: Error?) -> Void)?
}

var ongoingRequests = [RequestWithCompletionHandler<InitializableWithData>]()

我收到以下错误:

  

使用InitializableWithData作为符合协议的具体类型   

我对RequestWithCompletionHandler的“包含”的实际类型不感兴趣。我只想跟踪所有请求,而不关心他们将“返回”的实体。我想跟踪它们,以便取消它们,暂停它们等等。

所以我想跟踪所有正在进行的请求,以便我可以在必要时重新执行它们。

1 个答案:

答案 0 :(得分:0)

错误消息显示您不能将协议类型(InitializableWithData)用作具体类型(在RequestWithCompletionHandler<InitializableWithData>中)。

您需要符合协议的具体类型,例如结构

public protocol InitializableWithData {
  init(data: NSData?) throws
}

internal struct RequestWithCompletionHandler<T: InitializableWithData> {
  let request: APIRequest<T>
  let completionHandler: ((response: APIResponse<T>?, error: Error?) -> Void)?
}

struct Test : InitializableWithData {
  let data : NSData?

  init(data: NSData?) throws {
    self.data = data
  }
}

var ongoingRequests = [RequestWithCompletionHandler<Test>]()