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

why pass viewController as variable?

首先我不得不说我对 swift 和 Objective C.I 真的很陌生C.I 正在自学。

我对此代码有疑问

我的设置ViewController 中有一个名为"settingsViewControllerFinished" 的委托,它将整个控制器作为变量传递。 代码如下:

在我的 SettingViewController.swift

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

}

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

}

我是 confused.What 你是说如果你把整个控制器作为一个变量传递?(也许这个问题对你来说很愚蠢)


在我的 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
}

我想 is:I 将 SettingViewController 中的所有内容都传递给 ViewController 以便我可以使用 SettingViewController.

中的变量的原因

我说的对吗?

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

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