如何在Swift中正确使用委托?

约翰·杜

我阅读了很多有关代表的信息,但实际上我无法正确使用它。

说明:我有A: UIViewControllerB: UIViewC: UIViewController我想从运行SEGUEA: UIViewControllerC: UIViewController来自内部B: UIView

我试过了:

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")
}

但我确定我没有正确使用它。有人可以帮我吗?我不想只是一个答案。请尽快描述一下它的概念

克里斯托夫·范·兰德肖特(Kristof Van Landschoot)

代表只是您可以以多种方式使用的设计模式。您可以查看Apple框架,以了解如何以及在何处使用委托作为示例。表视图委托可能是UIKit中最著名的委托。

委托充当代码与未知类的实例进行通信的回调机制,而又不知道该实例将对委托协议的方法做出响应。

委托的替代方法是使用闭包(在Objective-C中,我们曾使用过闭包)。何时使用一个vs.另一个是一个品味的问题。有一些经验法则,例如这里概述的

IMO,您正在做的是使用委托的正确方法。您可以通过委托将视图功能与View Controller的功能分开,因此视图的约定很明确:用户需要响应委托方法。

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

与示例的主要区别在于,可能是您犯了一个错误的地方是代码的第三部分,您应该编写类似以下内容的代码:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift中正确使用EventLoopFuture?

来自分类Dev

如何在Swift 5中正确使用子类

来自分类Dev

如何在Swift中正确使用conditionak运算符

来自分类Dev

如何在Swift中正确释放内存?

来自分类Dev

如何在C中正确使用malloc?

来自分类Dev

如何在列表中正确使用Observable?

来自分类Dev

如何在GinMapBinder中正确使用TypeLiteral?

来自分类Dev

如何在Qt中正确使用AdjustSize()

来自分类Dev

如何在MySQL中正确使用索引

来自分类Dev

如何在SUMPRODUCT函数中正确使用OR

来自分类Dev

如何在EAR中正确使用OmniFaces

来自分类Dev

如何在Spring中正确使用@Async

来自分类Dev

如何在结构中正确使用fget?

来自分类Dev

如何在TThread中正确使用Idhttp?

来自分类Dev

如何在Python中正确使用fminsearch?

来自分类Dev

如何在python中正确使用队列?

来自分类Dev

如何在Rust中正确使用`peek()`?

来自分类Dev

如何在MIPS中正确使用指针?

来自分类Dev

如何在addEventListener中正确使用querySelectorAll

来自分类Dev

如何在Pygame中正确使用colliderect?

来自分类Dev

如何在C ++中正确使用并集?

来自分类Dev

如何在python中正确使用'or'和'and'

来自分类Dev

如何在pyqt中正确使用线程?

来自分类Dev

如何在PHP中正确使用变量

来自分类Dev

如何在SUBMIT中正确使用JavaScript?

来自分类Dev

如何在Makefile中正确使用gzip?

来自分类Dev

如何在apache中正确使用dnsmasq?

来自分类Dev

如何在R中正确使用gofstat?

来自分类Dev

如何在laravel中正确使用orWhere?