gpt4 book ai didi

ios - 如何在 Swift 中正确使用委托(delegate)?

转载 作者:行者123 更新时间:2023-11-28 06:48:02 26 4
gpt4 key购买 nike

我阅读了很多关于委托(delegate)的内容,但在实践中我无法正确使用它。

描述:我有A: UIViewController, B: UIView, C: UIViewController。我想从 B: UIView 的内部运行从 A: UIViewControllerC: UIViewController 的 segue。

我试过:

protocol SegueDelegate {
func runSegue(identifier: String)
}

class B: UIView { ... }

在我的 A: UIViewController 中:

override func viewDidLoad() {
B().delegate = self
}

func runSegue(identifier: String) {
self.performSegueWithIdentifier(identifier, sender: self)
}

并尝试通过以下方式调用它:

@IBAction func send(sender: AnyObject) {
let a: SegueDelegate? = nil
a!.runSegue("goToMainPage")
}

但我确定我没有正确使用它。任何人都可以帮我吗?我不想要一个答案。请简要描述一下它的概念

最佳答案

委托(delegate)只是一种设计模式,您可以通过多种方式使用它。您可以查看 Apple Frameworks 以了解如何以及在何处使用委托(delegate)作为示例。 TableView 委托(delegate)可能是 UIKit 中最著名的委托(delegate)。

委托(delegate)用作代码与未知类的实例通信的回调机制,而不知道该实例将响应委托(delegate)协议(protocol)的方法。

委托(delegate)的替代方法是使用闭包(我们过去在 Objective-C 中称为 block )。何时使用一个与另一个是品味问题。有一些经验法则,例如 outlined here .

在我看来,您正在做的是使用委托(delegate)的正确方法。您通过委托(delegate)将 View 功能与 View Controller 的功能分开,因此 View 的契约很明确:用户需要响应委托(delegate)方法。

您的代码有效且正确。我在这里做了一个快速实现:https://github.com/kristofvanlandschoot/DelegateUsage/tree/master

与您的示例的主要区别,也许这就是您犯错误的地方是代码的第三部分,您应该在其中编写如下内容:

@IBAction func send(sender: AnyObject) {
delegate?.runSegue("segueAB")
}

关于ios - 如何在 Swift 中正确使用委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35749568/

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