覆盖Swift

时间:2016-03-18 19:40:31

标签: swift initialization override

我正在开发一个应用程序,你可以在地图上放置引脚,然后查看与此位置相关的Flickr图像。

该应用程序几乎正常工作但我在某些类中遇到了初始化程序的问题。一个具体的例子是:

override init() {
    session = NSURLSession.sharedSession()
    super.init()
}

convenience init(delegate:HTTPClientProtocol) {
    self.init()
    self.delegate = delegate
}

有人可以帮我弄清楚这段代码有什么问题吗?在第一行,错误消息显示

  

初始化程序不会覆盖指定的初始值设定项   超

并且在self.init()的行上,错误是

  

类型' - > '的值没有成员'init'

1 个答案:

答案 0 :(得分:2)

如果您继承自NSObject,那么您的override init有效,因为您覆盖了NSObject的基本初始值设定项:

protocol HTTPClientProtocol { }

class NSObj: NSObject {

    var session: NSURLSession!
    var delegate: HTTPClientProtocol?

    override init() {
        session = NSURLSession.sharedSession()
        super.init()
    }

    convenience init(delegate:HTTPClientProtocol) {
        self.init()
        self.delegate = delegate
    }
}

如果您的类是不从任何其他类继承的基类,则您的override init将无效,因为您没有要覆盖的基类初始化程序。只需创建一个初始化程序和一个便利初始化程序,它可以调用刚创建的指定初始化程序:

protocol HTTPClientProtocol { }

class Obj {

    var session: NSURLSession!
    var delegate: HTTPClientProtocol?

    init() {
        session = NSURLSession.sharedSession()
    }

    convenience init(delegate:HTTPClientProtocol) {
        self.init()
        self.delegate = delegate
    }
}