"不符合协议"扩展不同类时出错

时间:2015-08-11 18:05:46

标签: swift protocols protocol-extension

我试图通过注入适应URLSessionURLSessionDataTask协议的对象来测试我自己的类。我正在扩展NSURLSessionNSURLSessionDataTask以采用这些协议,以便我可以正常使用现有对象,但在单元测试中使用测试对象。

我有以下代码,错误已注释:

typealias SessionHandler = (NSData?, NSURLResponse?, NSError?) -> Void

protocol URLSession {

  func dataTaskWithURL(url: NSURL, completionHandler: SessionHandler) -> URLSessionDataTask

}

protocol URLSessionDataTask {

}

// Type 'NSURLSession' does not conform to protocol 'URLSession'
extension NSURLSession : URLSession {}
extension NSURLSessionDataTask : URLSessionDataTask {}

我理解错误,我的协议与NSURLSession所暗示的方法完全匹配。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我最终做的是创建一个协议扩展,创建NSURLSession所需的必要方法。

extension NSURLSession : URLSession {
  func dataTaskWithURL(url: NSURL, completionHandler: SessionHandler) -> URLSessionDataTask {
    return dataTaskWithURL(url, completionHandler: completionHandler) as NSURLSessionDataTask
  }
}