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

Kos*_*ika 4 xcode ios swift xcode6 ios8

在最新的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)
}
Run Code Online (Sandbox Code Playgroud)

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

Kir*_*ins 6

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

initWithCoder:返回从给定unarchiver中的数据初始化的对象.(需要)


new*_*cct 6

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