Swift - 为什么在AFHTTPSessionManager中需要init(编码器)?

时间:2015-03-28 17:12:42

标签: ios swift afnetworking-2 nscoder

我在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类都需要它?

1 个答案:

答案 0 :(得分:1)

每次编码和解码对象时都会使用

initWithCoder:encodeWithCoder:,通常用于写入/读取磁盘。你说故事板使用它是正确的,但它也是在应用程序启动之间保存数据的一种非常常见的方式。

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