NSURLSession self as delegate in init or inner class?

NSURLSession self as delegate in init or inner class?

我不明白为什么我在 init 中创建 NSURLSession 时得到 'self' used before super.init call

这是我使用的代码:

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()
    }
}

我还看到其他人的代码,他们创建了一个内部 class 来实现委托,然后在父 class 中有一个 class 的实例,然后实例用作委托。这是'swifty'对待代表的方式吗?

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

使用Swift,在满足两阶段初始化之前,您不能引用自己:

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

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

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