gpt4 book ai didi

快速委派

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

我无法理解 Swift 中的委托(delegate)。阅读了一些指南后,我能够在两个 ViewController 之间设置委托(delegate),但我不明白它是如何工作的。在我的第一个 View Controller 中,我有一个标签,显示在第二个 View Controller 中输入的内容,其中包含一个文本字段和一个按钮(返回到第一个 View Controller )。这是第一个 View Controller 的代码:

@IBOutlet weak var labelText: UILabel!
func userDidEnterInformation(info: String) {
labelText.text = info;
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "transition"){
let secondVC: SecondViewController = segue.destinationViewController as! SecondViewController;
secondVC.delegate = self;

}
}

这是第二个 View Controller 的代码:

protocol DataEnteredDelegate{
func userDidEnterInformation(info: String);
}

@IBOutlet weak var userText: UITextField!
var delegate: DataEnteredDelegate? = nil;


@IBAction func buttonPressed(sender: AnyObject) {
let information = userText.text!;
delegate!.userDidEnterInformation(information);
self.navigationController?.popToRootViewControllerAnimated(true);


}

我的理解是,在文本字段内的文本中存储在信息常量中,然后调用协议(protocol)中的 userDidEnterInformation 方法,该方法在第一个 View Controller 内定义。然后,此方法更改第一个 View Controller 内的标签。问题是,我不确定prepareForSegue 函数中发生了什么。具体来说,我不确定 secondaryVC.delegate = self 的目的是什么。

我希望对授权有任何明确的说明。

最佳答案

该图很简单,但可以帮助您了解正在发生的事情。

diagram

FirstViewController必须符合DataEnteredDelegate您定义的协议(protocol)(请参阅 Sumit 的回答)。使用时secondVC.delegate = self ,你是说对于segue transition目的地是 SecondViewController ,属性delegate其中SecondViewController实例将被设置为 FirstViewController 的此实例,从而将事情委托(delegate)给 SecondViewController给您FirstViewController DataEnteredDelegate 使之成为可能协议(protocol)。

关于快速委派,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31527800/

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