通过一个简单的例子向我解释 Swift 中的委托

Explain me delegation in Swift by a simple example

我最近在学习Swift。我创建了各种复杂的项目,但我仍然不理解委派的本质。在我的项目中,我试图以各种可能的方式避免它。 我观看了有关该主题的各种视频,阅读了文章,但我无法理解授权的本质。 现在我决定花一些时间来解决这个问题,并创建了一个简单的项目来解决这个问题,但我仍然无法理解。

我想在点击按钮时从 FirstViewController 传递文本到 SecondViewController ,但是这段代码不起作用,是什么原因?我做错了什么?

protocol Protocol {
    func  fillTheLabel(with text: String)
}

class FirstViewController: UIViewController {

    var delegate: Protocol?
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func buttonPressed(_ sender: Any) {
        let text = "Some Text Here"
        delegate?.fillTheLabel(with: text)
    }
}

// 按钮和 SecondViewController 之间有一个赛格威

class SecondViewController: UIViewController, Protocol {
    
    var firstVC: FirstViewController?

    @IBOutlet var label: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        firstVC?.delegate = self
    }
    
    func fillTheLabel(with text: String) {
        label.text = text
    }
}

S0,如评论所述:

– 它不起作用,因为您的 VC1 在 VC2

中为 nil

– 让一个 VC 代表另一个

是不好的做法

简单的理论例子是:

您有 class DataParser 从互联网加载一些数据,进行解析,使数据被视为您的模型,将其保存到本地存储。这需要时间。在所有准备工作完成后,您的 VC 应该会显示此数据。

工作完成后class DataParser 应该通知 VC 它已完成数据并且VC欢迎展示

当然 VC 应该通过实施来“展示”他们的兴趣:

dataParser.delegate = self

Class 正在“寻找”对他的消息感兴趣的代表:

delegate?.dataIsReadyToBeShown(with: data)

委托(此处为VC)在

中获取数据
func dataIsReadyToBeShown(with data: AnyClass)