在 Swift 中重写初始化器
Overriding Initializers in Swift
我正在开发一个应用程序,您可以在其中将图钉放在地图上并查看与该位置关联的 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
}
}
如果您的 class 是一个基础 class,它不继承任何其他 class,您的 override init
将无法工作,因为您没有要覆盖的 base class 初始值设定项。只需创建一个初始化程序和一个调用您刚刚创建的指定初始化程序的便利初始化程序:
protocol HTTPClientProtocol { }
class Obj {
var session: NSURLSession!
var delegate: HTTPClientProtocol?
init() {
session = NSURLSession.sharedSession()
}
convenience init(delegate:HTTPClientProtocol) {
self.init()
self.delegate = delegate
}
}
我正在开发一个应用程序,您可以在其中将图钉放在地图上并查看与该位置关联的 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
}
}
如果您的 class 是一个基础 class,它不继承任何其他 class,您的 override init
将无法工作,因为您没有要覆盖的 base class 初始值设定项。只需创建一个初始化程序和一个调用您刚刚创建的指定初始化程序的便利初始化程序:
protocol HTTPClientProtocol { }
class Obj {
var session: NSURLSession!
var delegate: HTTPClientProtocol?
init() {
session = NSURLSession.sharedSession()
}
convenience init(delegate:HTTPClientProtocol) {
self.init()
self.delegate = delegate
}
}