我是 swift 新手,具有良好的 Objective-C 背景,我正在尝试通过子类化 AFHTTPSessionManager 并将其转换为单例来编写 Web 处理程序。在 self 初始化期间,我收到一个奇怪的错误,我无法解决(Must call a designated initializer of the subclass 'AFHTTPSessionManager')
- 它也在下面的代码中进行了注释,以帮助理解它发生的位置。另请建议这是否是实现单例的正确方法。
class XYZWebHandler: AFHTTPSessionManager
{
internal static let _sharedInstance = XYZWebHandler()
class func sharedInstance() -> XYZWebHandler
{
return _sharedInstance
}
init(baseURL url: NSURL!)
{
super.init(baseURL: url) //Must call a designated initializer of the subclass 'AFHTTPSessionManager'
setup()
}
override init(baseURL url: NSURL!, sessionConfiguration configuration: NSURLSessionConfiguration!)
{
super.init(baseURL: url, sessionConfiguration: configuration)
setup()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setup()
{
requestSerializer = AFJSONRequestSerializer()
responseSerializer = AFJSONResponseSerializer()
}
}
非常感谢您的帮助。期待尽快收到您的回复
最佳答案
1) 你的单例需要改进 - 请参阅此处 swift 的一些很好的例子: https://github.com/hpique/SwiftSingleton/tree/master/Singleton
2) 至于错误:Swift 在初始化器上有两种类型:指定型和便利型 - 后者是次要的,不必提供。至于指定的 - 它是初始化所有属性的主要初始化程序,它是每个类的必备项,并且还必须从其直接父类(super class)中调用指定的初始化程序。 鉴于此 - 您需要转到 AFHTTPSessionManager 并找到一个适当的指定初始化程序来创建 session 并将其存储在 _sharedInstance 中。您也可能是这家商店的 Actor (as!)。例如
_sharedInstance = AFHTTPSessionManager(baseURL: NSURL("http://your_url.com")) as! XYZWebHandler
3)我加入了对 Alamo 的推荐 - 它较新:)
祝你好运。
关于ios - 子类化 AFHTTPSessionManager 并使其成为 swift 中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393583/