问题描述
我在iOS开发方面经验不足。在制作 AFHTTPSessionManager
的子类时,XCode建议我包括必需的 init(coder)
:
I'm not very experienced in iOS development. While making subclass of AFHTTPSessionManager
XCode suggested me to include required 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
处理与故事板相关的代码(例如,在笔尖加载时调用)。
My main question is why it's required? As far as I know NSCoder
deals with storyboards related code (e.g. called when the nib loads).
相关问题包含一些信息,但这是否意味着所有扩展Objective-C的Swift类都将需要它?
Related question Class does not implement its superclass's required members contains some info but does it mean that all Swift classes that extend Objective-C ones will need it?
推荐答案
initWithCoder:
和 encodeWithCoder:
可以在每次对对象进行编码和解码时使用,通常用于磁盘读写。没错,情节提要使用了此功能,但这也是在两次应用启动之间保存数据的一种非常常用的方法。
initWithCoder:
and encodeWithCoder:
are used any time you encode and decode objects, usually for writing to / reading from disk. You're right that storyboards use this, but it's also a very common way to save data in between app launches.
AFHTTPSessionManager
实现此方法,以便您可以对会话管理器进行编码。由于是在此处实现的,因此您必须在子类中重写它,并在调用super之前设置或解码所有非可选属性。
AFHTTPSessionManager
implements this method so that you can encode your session manager if you want. Because it's implemented there, you must override it in your subclass, and set or decode any non-optional properties before you call super.
这篇关于Swift-为什么在AFHTTPSessionManager中需要init(coder)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!