我无法理解为什么在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()
}
}
此外,我还看到了其他人的代码,他们创建了一个实现委托的内部类,然后在父类中创建了该类的实例,并将该实例用作委托。这是与代表打交道的“快捷”方式吗?
为什么我的代码不起作用?我应该使用内部类方式吗?如果是这样做有什么好处?
答案 0 :(得分:2)
使用Swift,在满足两阶段初始化之前,不允许引用self:
您在设置委托时指的是self,但未在类上设置所有属性或让NSObject设置其属性。
编辑:找到您可以尝试的这些解决方案。我更喜欢懒惰的方法,但这意味着你失去了一个令人沮丧的常数...... http://www.scottlogic.com/blog/2014/11/20/swift-initialisation.html