我试图在App类中实现SharedInstanceDelegate。我不知道为什么没有调用协议下的函数。
这是我的协议和课程。
class App {
let sharedInstance = SharedInstance.shared
init() {
self.sharedInstance.delegate = self
}
}
extension App: SharedInstanceDelegate {
func1() { } // this is not executed
func2() { }
}
protocol SharedInstanceDelegate: class {
func1()
func2()
}
class SharedInstance {
static let shared = SharedInstance()
weak var delegate: SharedInstanceDelegate?
private init() { }
func method1() {
self.delegate?.func1() // this is executed
}
}
答案 0 :(得分:4)
我相信你的意思是让SharedInstanceDelegate
成为一个协议,但你已经把它变成了一个类。在任何一种情况下,App
都不符合/继承SharedInstanceDelegate
,因此不清楚它是如何编译的。
答案 1 :(得分:1)
以下是我如何实现代码以使用委托:
class App {
let sharedInstance = SharedInstance.shared
init() {
self.sharedInstance.delegate = self
}
}
extension App: SharedInstanceDelegate {
func func1() { } // this will run now
func func2() { }
}
protocol SharedInstanceDelegate {
func func1()
func func2()
}
class SharedInstance {
static let shared = SharedInstance()
var delegate: SharedInstanceDelegate?
private init() { }
func method1() {
self.delegate?.func1() // this is executed
}
}
答案 2 :(得分:0)
仍然不知道为什么会这样,但清理项目修复了这个问题。这很奇怪。我有其他代表成功致电。
答案 3 :(得分:0)
您的代码可以正常工作,但这取决于您调用func1()的方式。这样称呼它:
let testinstance = App().sharedInstance
testinstance.delegate?.func1()
将无效,因为您没有持有App对象。在这种情况下,App对象是委托,但由于它是一个弱成员,没有人保留它,它会立即释放。
如果你这样称呼它:
let testapp = App()
testapp.sharedInstance.delegate?.func1()
它有效。在这种情况下,App对象被保留,并且在调用func1()时仍然存在。
无论哪种方式,这些类的相关方式让我感到困惑。为什么要有一个单独的SharedInstance类?