gpt4 book ai didi

swift - NSViewController 委托(delegate)?

转载 作者:行者123 更新时间:2023-11-30 10:14:57 26 4
gpt4 key购买 nike

我刚开始在 Swift 中使用委托(delegate),而且我似乎不知道如何与不同类的 View Controller 进行通信。具体来说,我从应用程序委托(delegate)中调用自定义类的函数,然后从该自定义类中调用 View Controller 中的函数。我的基本设置,following this question ,是:

AppDelegate.swift:

var customClass = customClass()
func applicationDidFinishLaunching(aNotification: NSNotification) {
customClass.customFunction()
}

CustomClass.swift:

weak var delegate: ViewControllerDelegate?
func customFunction() {
delegate?.delegateMethod(data)
}

ViewController.swift:

protocol ViewControllerDelegate: class {
func customFunction(data: AnyObject)
}
class ViewController: NSViewController, ViewControllerDelegate
func customFunction(data: AnyObject){
println("called")
}
}

但是,delegate 始终为nil。我假设这是因为 ViewControllerDelegate 协议(protocol)从未被初始化,或者因为我从未设置实际 NSViewController 的委托(delegate)?我知道我错过了一些明显/直接的东西,但我还没有看到那是什么。

最佳答案

你的问题很难回答,因为你完全误解了协议(protocol)的要点。

协议(protocol)是一种用于定义功能的类型。符合此协议(protocol)的类通过实现所需的方法来提供指定的功能。

您无法初始化协议(protocol)。

如果你的 CustomClass 看起来像这样:

class CustomClass {
weak var delegate: ViewControllerDelegate?
func customFunction() {
delegate?.delegateMethod(data)
}
}

为什么你期望delegate突然有一个值?

当然,您必须先将delegate设置为某项。委托(delegate)必须设置delegate。如果您希望 ViewController 实例成为委托(delegate),它必须将自己分配给delegate

例如,这将起作用。

protocol ViewControllerDelegate {
func delegateMethod(data: AnyObject) //I renamed this because in
//CustomClass you are trying to call `delegateMethod` on the delegate
}
class CustomClass {
weak var delegate: ViewControllerDelegate?
func customFunction() {
delegate?.delegateMethod(data)
}
}
class ViewController: NSViewController, ViewControllerDelegate

var customClass = CustomClass()

func viewDidLoad(){
customClass.delegate = self
customClass.customFunction()
}

func delegateMethod(data: AnyObject){
println("called")
}
}

了解更多关于delegation here的信息.

关于swift - NSViewController 委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679869/

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