【发布时间】:2023-03-12 16:07:01
【问题描述】:
我在用 Swift 处理委托时遇到了麻烦。在阅读了一些指南之后,我能够在两个 ViewController 之间设置委托,但我不明白它是如何工作的。在我的第一个视图控制器中,我有一个标签,显示在第二个视图控制器中输入的内容,其中包含一个文本字段和一个按钮(返回到第一个视图控制器)。这是第一个视图控制器的代码:
@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;
}
}
这是第二个视图控制器的代码:
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);
}
我的理解是,在文本字段中的文本被存储在信息常量中,然后调用协议中的 userDidEnterInformation 方法,该方法在第一个视图控制器中定义。然后,此方法更改第一个视图控制器内的标签。问题是,我不确定 prepareForSegue 函数中发生了什么。具体来说,我不确定 secondVC.delegate = self 的目的是什么。
我将不胜感激任何形式的授权。
【问题讨论】:
-
顺便说一句,在 Swift 中,您可以在每行的末尾省略分号。这样,您的代码将看起来不那么混乱。 :-)
标签: swift class share delegation