在子类化 NSURLSession Swift 时,初始化器不会覆盖指定的初始化器
Initializer does not override a designated initializer while subclassing NSURLSession Swift
我想子class NSURLSession class,但我有初始化问题。
基本上我重写构造函数并在那里初始化常量 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)
}
}
从 NSURLSession 的源代码中我发现它有两个初始化器:
public /*not inherited*/ init(configuration: NSURLSessionConfiguration)
public /*not inherited*/ init(configuration: NSURLSessionConfiguration, delegate: NSURLSessionDelegate?, delegateQueue queue: NSOperationQueue?)
我希望 "longest" init 是指定的初始化器,但它不是。
我怀疑那个指定的初始值设定项是 init()
,它甚至没有在源代码中指定。
如何覆盖初始化程序并设置配置 NSURLSessionConfiguration
?
你不能。
唯一指定的初始化器是 NSURLSession.init()
,您必须从子class 初始化器中调用它。 NSURLSession
configuration
、delegate
和 delegateQueue
属性是只读的,因此您不能手动设置它们。
更好的方法是用自定义 class:
包装 NSURLSession
class NSURLAuthSession {
private let urlSession: NSURLSession
init(urlSession: NSURLSession) {
self.urlSession = urlSession
}
}
因此您将拥有更多控制和自定义选项。
仅公开 "dummy" 初始化程序的原因是 UIKit 的开发人员不希望您继承 NSURLSession。如果您只想提供自己的 URL,请在 NSURLSession 上编写一个方便的方法,或者使用现有的 API.
自行配置它
我想子class NSURLSession class,但我有初始化问题。
基本上我重写构造函数并在那里初始化常量 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)
}
}
从 NSURLSession 的源代码中我发现它有两个初始化器:
public /*not inherited*/ init(configuration: NSURLSessionConfiguration)
public /*not inherited*/ init(configuration: NSURLSessionConfiguration, delegate: NSURLSessionDelegate?, delegateQueue queue: NSOperationQueue?)
我希望 "longest" init 是指定的初始化器,但它不是。
我怀疑那个指定的初始值设定项是 init()
,它甚至没有在源代码中指定。
如何覆盖初始化程序并设置配置 NSURLSessionConfiguration
?
你不能。
唯一指定的初始化器是 NSURLSession.init()
,您必须从子class 初始化器中调用它。 NSURLSession
configuration
、delegate
和 delegateQueue
属性是只读的,因此您不能手动设置它们。
更好的方法是用自定义 class:
包装NSURLSession
class NSURLAuthSession {
private let urlSession: NSURLSession
init(urlSession: NSURLSession) {
self.urlSession = urlSession
}
}
因此您将拥有更多控制和自定义选项。
仅公开 "dummy" 初始化程序的原因是 UIKit 的开发人员不希望您继承 NSURLSession。如果您只想提供自己的 URL,请在 NSURLSession 上编写一个方便的方法,或者使用现有的 API.
自行配置它