Ale*_*xey 2 subclassing nsurlsession nsurlsessionconfiguration swift
我想对 NSURLSession 类进行子类化,但我在初始化时遇到问题。基本上我重写构造函数并在那里初始化常量,authUrl然后调用父 init 方法。
class NSURLAuthSession: NSURLSession {
let authUrl:NSURL;
//Error: Initializer does not override a designated initializer from its superclass
override init(configuration: NSURLSessionConfiguration, delegate: NSURLSessionDelegate?, delegateQueue queue: NSOperationQueue?){
self.authUrl = NSURL.URLWithBaseURLString("http://192.168.10.105:8888/api/v1", pathSegments: ["users", "login"])!
super.init(configuration: configuration, delegate: delegate, delegateQueue: queue)
}
}
Run Code Online (Sandbox Code Playgroud)
从 NSURLSession 的源代码中我发现它有两个初始化器:
public /*not inherited*/ init(configuration: NSURLSessionConfiguration)
public /*not inherited*/ init(configuration: NSURLSessionConfiguration, delegate: NSURLSessionDelegate?, delegateQueue queue: NSOperationQueue?)
Run Code Online (Sandbox Code Playgroud)
我期望“最长”的初始化程序是指定的初始化程序,但事实并非如此。我怀疑指定的初始值设定项init()甚至没有在源代码中指定。如何覆盖初始化程序并设置配置NSURLSessionConfiguration?
你不能。
唯一指定的初始值设定项是NSURLSession.init(),您必须从子类初始值设定项中调用它。NSURLSession configuration,delegate并且delegateQueue属性是只读的,因此您无法手动设置它们。
更好的方法是用NSURLSession自定义类包装:
class NSURLAuthSession {
private let urlSession: NSURLSession
init(urlSession: NSURLSession) {
self.urlSession = urlSession
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您将拥有更多的控制和定制选项。
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |