Swift - 为什么 AFHTTPSessionManager 需要 init(coder)?
Swift - Why init(coder) is required in AFHTTPSessionManager?
我在 iOS 开发方面不是很有经验。在制作 AFHTTPSessionManager
的子类时 XCode 建议我包含必需的 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
处理与故事板相关的代码(例如,在 nib 加载时调用)。
相关问题 Class does not implement its superclass's required members 包含一些信息,但这是否意味着扩展 Objective-C 的所有 Swift 类 都需要它?
initWithCoder:
和 encodeWithCoder:
在编码和解码对象时使用,通常用于写入/读取磁盘。故事板使用它是对的,但它也是在应用程序启动之间保存数据的一种非常常见的方式。
AFHTTPSessionManager
实现此方法,以便您可以根据需要对会话管理器进行编码。因为它在那里实现,所以你必须在你的子类中覆盖它,并在你调用 super 之前设置或解码任何非可选属性。
我在 iOS 开发方面不是很有经验。在制作 AFHTTPSessionManager
的子类时 XCode 建议我包含必需的 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
处理与故事板相关的代码(例如,在 nib 加载时调用)。
相关问题 Class does not implement its superclass's required members 包含一些信息,但这是否意味着扩展 Objective-C 的所有 Swift 类 都需要它?
initWithCoder:
和 encodeWithCoder:
在编码和解码对象时使用,通常用于写入/读取磁盘。故事板使用它是对的,但它也是在应用程序启动之间保存数据的一种非常常见的方式。
AFHTTPSessionManager
实现此方法,以便您可以根据需要对会话管理器进行编码。因为它在那里实现,所以你必须在你的子类中覆盖它,并在你调用 super 之前设置或解码任何非可选属性。