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,在满足两阶段初始化之前,您不能引用自己:
您在设置委托时指的是 self,但尚未设置您的所有属性 class 或让 NSObject 设置其属性。
编辑: 找到了这些您可以尝试的解决方案。我更喜欢 lazy var 方法,但这意味着你失去了常量,这有点令人沮丧......
http://www.scottlogic.com/blog/2014/11/20/swift-initialisation.html
我不明白为什么我在 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,在满足两阶段初始化之前,您不能引用自己:
您在设置委托时指的是 self,但尚未设置您的所有属性 class 或让 NSObject 设置其属性。
编辑: 找到了这些您可以尝试的解决方案。我更喜欢 lazy var 方法,但这意味着你失去了常量,这有点令人沮丧...... http://www.scottlogic.com/blog/2014/11/20/swift-initialisation.html