Swift:扩展中存储的属性无法识别的选择器异常

时间:2016-09-03 21:41:37

标签: ios swift properties swift-extensions

我有一个NSURLSessionDownloadTask的扩展,在这个扩展内部,我创建了一个名为' id'的存储属性。使用Objective C关联对象。当我尝试设置属性时,我会发现一个无法识别的选择器发送到实例'。这是我的代码:

extension NSURLSessionDownloadTask {

  private struct AssociatedKeys {
    static var id: String?
  }

  var id: String? {
    get {
      return objc_getAssociatedObject(self, &AssociatedKeys.id) as? String
    }
    set {
      if let newValue = newValue {
        objc_setAssociatedObject(self, &AssociatedKeys.id, newValue as String?, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
      }
    }
  }
}

稍后;

let task = session.downloadTaskWithURL(url)
task.id = identifier

1 个答案:

答案 0 :(得分:1)

我无法完全解释它,但问题似乎就是这样 session.downloadTaskWithURL(url)返回一些实例 内部子类__NSCFLocalDownloadTask

如果您将扩展名定义为NSURLSessionTask的扩展名 而不是NSURLSessionDownloadTask

extension NSURLSessionTask { ... }

然后它在我的测试中起作用。