Swift - XCode6 beta5需要每个类的init(编码器)

时间:2014-08-07 08:35:33

标签: ios xcode swift ios8 xcode6

在最新的XCode 6 beta(5)中,我注意到我的应用程序中几乎每个类都抱怨错误:

Class does not implement its superclass's required members

例如:

import UIKit

let _sharedAPIManager = APIManager(baseURL: NSURL.URLWithString(API_URL))

class APIManager: AFHTTPSessionManager {

class var sharedInstance : APIManager {
    return _sharedAPIManager
}

// this fixes compiler error but why it should be here?
required init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

override init() {
    super.init()
}

override init(baseURL url: NSURL!) {
    super.init(baseURL: url)

    self.responseSerializer = AFJSONResponseSerializer()
    self.requestSerializer = AFJSONRequestSerializer()

    self.requestSerializer.setValue(API_KEY, forHTTPHeaderField: "X-Api-Key")
    self.requestSerializer.setValue("3", forHTTPHeaderField: "X-Api-Version")
}

override init(baseURL url: NSURL!, sessionConfiguration configuration: NSURLSessionConfiguration!) {
    super.init(baseURL: url, sessionConfiguration: configuration)
}

问题是为什么它甚至在AFNetworking的AFHTTPSessionManager的子类化中也是相关的?我错过了什么吗?

2 个答案:

答案 0 :(得分:6)

因为AFHTTPSessionManager符合NSCoding并且initWithCoder:是必需的。来自手册:

  

initWithCoder:返回从给定数据初始化的对象   取档。 (所需的)

答案 1 :(得分:6)

因为您的类会覆盖某些超类的指定初始值设定项,所以它不会自动从超类继承初始值设定项。如果你没有覆盖任何初始化器,那么超类中的所有初始化器都将被自动继承,因此将满足NSCoding所需的初始化器。