NSURLSession self作为init或内部类中的委托?

时间:2015-02-19 14:12:34

标签: ios swift nsurlsession

我无法理解为什么在init中创建'self' used before super.init call时我得到NSURLSession

这是我正在使用的代码:

class MyClass: NSObject, NSURLSessionDataDelegate{

    private let urlSession: NSURLSession
    private let task : NSURLSessionTask
    private let operationQueue = NSOperationQueue()
    private let url: NSURL

    init(url: NSString){

        self.url = NSURL(string: url)!
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()

        urlSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue)
        task = urlSession.dataTaskWithURL(self.url);
        task.resume()
    }
}

此外,我还看到了其他人的代码,他们创建了一个实现委托的内部类,然后在父类中创建了该类的实例,并将该实例用作委托。这是与代表打交道的“快捷”方式吗?

为什么我的代码不起作用?我应该使用内部类方式吗?如果是这样做有什么好处?

1 个答案:

答案 0 :(得分:2)

使用Swift,在满足两阶段初始化之前,不允许引用self:

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID220

您在设置委托时指的是self,但未在类上设置所有属性或让NSObject设置其属性。

编辑:找到您可以尝试的这些解决方案。我更喜欢懒惰的方法,但这意味着你失去了一个令人沮丧的常数...... http://www.scottlogic.com/blog/2014/11/20/swift-initialisation.html