覆盖 Swift 中的初始值设定项



我正在开发一个应用程序,您可以在其中将图钉放在地图上并查看与此位置相关的Flickr图像。

该应用程序几乎可以正常工作,但是我在某些类中的初始值设定项中遇到了问题。一个具体的例子如下:

override init() {
    session = NSURLSession.sharedSession()
    super.init()
}
convenience init(delegate:HTTPClientProtocol) {
    self.init()
    self.delegate = delegate
}

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

初始值设定项不会从其 超类

并且在与self.init()的线上错误是

类型为"->"的值没有成员"init"

如果你从 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将不起作用,因为您没有要重写的基类初始值设定项。 只需创建一个初始值设定项和一个方便的 init,即可调用您刚刚创建的指定初始值设定项:

protocol HTTPClientProtocol { }
class Obj {
    var session: NSURLSession!
    var delegate: HTTPClientProtocol?
    init() {
        session = NSURLSession.sharedSession()
    }
    convenience init(delegate:HTTPClientProtocol) {
        self.init()
        self.delegate = delegate
    }
}

最新更新