我有一个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
答案 0 :(得分:1)
我无法完全解释它,但问题似乎就是这样
session.downloadTaskWithURL(url)
返回一些实例
内部子类__NSCFLocalDownloadTask
。
如果您将扩展名定义为NSURLSessionTask
的扩展名
而不是NSURLSessionDownloadTask
extension NSURLSessionTask { ... }
然后它在我的测试中起作用。