我正在开发一个应用程序,您可以在其中将图钉放在 map 上并查看与该位置关联的 Flickr 图像。
该应用程序几乎可以工作,但我在某些类中遇到了初始化程序问题。具体示例如下:
override init() {
session = NSURLSession.sharedSession()
super.init()
}
convenience init(delegate:HTTPClientProtocol) {
self.init()
self.delegate = delegate
}
有人可以帮我找出这段代码有什么问题吗?在第一行,错误消息显示
Initializer does not override a designated initializer from its superclass
在 self.init()
线上,错误为
Value of type '->' has no member '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
}
}
如果您的类是不从任何其他类继承的基类,则您的重写 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
}
}
关于swift - 在 Swift 中重写初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092956/