2016-09-03 30 views
2

我有一个NSURLSessionDownloadTask的扩展,在这个扩展中,我使用Objective C相关对象创建了一个名为'id'的存储属性。当我尝试设置属性时,我得到'无法识别的选择器发送到实例'。这里是我的代码如下:Swift:扩展中存储的属性无法识别的选择器异常

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

我不能完全解释它,但问题似乎是 session.downloadTaskWithURL(url)返回一些 内部子__NSCFLocalDownloadTask的一个实例。

如果定义扩展为NSURLSessionTask 代替NSURLSessionDownloadTask

extension NSURLSessionTask { ... } 

的扩展,然后它的工作在我的测试。

相关问题