gpt4 book ai didi

ios - 委托(delegate)属性(property)与协议(protocol)采用

转载 作者:行者123 更新时间:2023-11-29 02:03:17 24 4
gpt4 key购买 nike

如果我已经在类声明的顶部声明采用特定协议(protocol),那么将 View Controller 的属性 delegate 设置为 self 的目的是什么。我提供了示例:

class TabBarViewController: UITabBarController, UITabBarControllerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
}

是否有必要显式编写self.delegate = self,为什么?我想重复一遍。

最佳答案

采用符合协议(protocol)与将TabBarViewController实例 分配为委托(delegate)是分开的。采用协议(protocol)告诉编译器这个类型实现了协议(protocol)声明指定的方法。分配委托(delegate)是一个单独的步骤,将 self 引用分配为委托(delegate)。此外,并非所有协议(protocol)都用于代表。

如果需要 UITabBarController 来实现 UITabBarControllerDelegate,那么您就不需要 self.delegate = self 行,因为它总是是的,但是许多人没有将 UITabBarController 子类化并将委托(delegate)设置为他们自己的对象,例如仅实现 UITabBarControllerDelegateMyTabBarControllerDelegate。这基本上是分离关注点,以便可以以更模块化的方式构建代码。

这种情况看起来有点奇怪,因为通常委托(delegate)分配给不同的类。例如,将 View Controller 分配为 UITableViewUITableViewDelegate。在那种情况下,大多数人不会子类化 UITableView,而是将 UITableViewDelegate 采纳添加到包含 UITableView 的 View Controller 中,但是委托(delegate)范式足够灵活,您可以选择在何处放置该功能。

关于ios - 委托(delegate)属性(property)与协议(protocol)采用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30097938/

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