本文介绍了Swift-为什么在AFHTTPSessionManager中需要init(coder)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 04:04