为什么将viewController作为变量传递?

时间:2016-01-23 15:26:14

标签: swift viewcontroller

首先,我要说的是我对快速和目标C的新手。我正在自己学习。

我对此代码有疑问

我在我的SettingViewController中有一个名为" settingsViewControllerFinished"它将整个控制器作为变量传递。 像这样的代码:

在我的SettingViewController.swift

protocol SettingViewControllerDelegate: class {
func settingsViewControllerFinished(settingsViewController: SettingsViewController)

}

@IBAction func close(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
self.delegate?.settingsViewControllerFinished(self)

}

我很困惑。如果你将整个控制器作为变量传递,你的意思是什么?(也许问题对你来说很愚蠢)

在我的viewController中:

func settingsViewControllerFinished(settingsViewController: SettingsViewController)
{
    self.brushWidth = settingsViewController.brush
    self.opacity = settingsViewController.opacity
    self.red = settingsViewController.red
    self.green = settingsViewController.green
    self.blue = settingsViewController.blue
}

我想原因是:我将SettingViewController中的所有内容传递给ViewController,以便我可以使用SettingViewController中的变量。

我好吗?

1 个答案:

答案 0 :(得分:1)

通常你是对的,:将SettingViewController传递回其委托,使原始调用者无需保留对已创建和显示的SettingViewController的引用委托方法已经发送相关信息。

但还有更多:在某些代理情况下,这种风格对于不同的东西很有用。想象一下由函数func somethingGotClicked(sender:YourSenderType)组成的点击处理程序。如果您的类创建了YourSenderType的多个实例,并在将自己注册为其委托的同时显示它们,那么如果没有{{1}则无法知道哪个被点击了参数。在某些sender中,您不会知道哪个被点击了。当显示多个func somethingGotClicked()UITableView是一个单一视图并将一个实例设置为其委托时,通常需要使用该功能。