gpt4 book ai didi

swift - 在 Swift 中覆盖初始化器

转载 作者:搜寻专家 更新时间:2023-11-01 07:26:09 25 4
gpt4 key购买 nike

我正在开发一个应用程序,您可以在其中将图钉放在 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
}
}

如果您的类是一个不从任何其他类继承的基类,您的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
}
}

关于swift - 在 Swift 中覆盖初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com