Swift – 为什么init(编码器)在AFHTTPSessionManager中是必需的?

我在iOS开发方面不是很有经验。 AFHTTPSessionManager XCode的子类build议我包含所需的init(coder)

 import UIKit let _sharedAPIManager = APIManager(baseURL: NSURL(string: API_URL)!) class APIManager: AFHTTPSessionManager { /** * Singleton service * (https://github.com/hpique/SwiftSingleton) */ class var sharedInstance : APIManager { return _sharedAPIManager } init(baseURL url: NSURL!) { super.init(baseURL: url, sessionConfiguration: nil) self.responseSerializer = AFJSONResponseSerializer() as AFJSONResponseSerializer self.requestSerializer = AFJSONRequestSerializer() as AFJSONRequestSerializer self.requestSerializer.setValue(API_KEY, forHTTPHeaderField: "X-Api-Key") self.requestSerializer.setValue("3", forHTTPHeaderField: "X-Api-Version") } // this was inserted by XCode required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 

我的主要问题是为什么它是必需的? 据我所知NSCoder处理故事板相关的代码(例如,当笔尖加载时调用)。

相关问题类没有实现它的超类所需的成员包含一些信息,但这是否意味着扩展Objective-C的所有Swift类将需要它?

initWithCoder:encodeWithCoder:在您编码和解码对象时使用,通常用于写入/读取磁盘。 你是对的故事板使用这个,但它也是一个非常普遍的方式来保存应用程序启动之间的数据。

AFHTTPSessionManager实现此方法,以便您可以编码会话pipe理器。 因为它是在那里实现的,所以你必须在你的子类中覆盖它,并且在调用super之前设置或者解码任何非可选属性。