如果我已经在类声明的顶部宣布采用特定协议,那么将视图控制器的属性delegate
设置为self
的目的是什么。我提供了一些例子:
class TabBarViewController: UITabBarController, UITabBarControllerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
}
是否有必要明确写出self.delegate = self
以及为什么?我想重复自己。
答案 0 :(得分:0)
UITabBarController默认情况下不符合UITabBarControllerDelegate,如UITabBarController Class Reference所示,与UITabBarDelegate不同,所以是的,有必要显式编写self.delegate = self
以便调用委托方法。并且不想重复自己,只需将委托对象视为自定义控制器对象
答案 1 :(得分:0)
遵守协议采用与将TabBarViewController
的实例指定为委托是分开的。采用该协议告诉编译器此类型实现协议声明指定的方法。分配委托是一个单独的步骤,将self
引用指定为委托。此外,并非所有协议都用于代表。
如果需要UITabBarController
来实施UITabBarControllerDelegate
,那么您就不需要self.delegate = self
行,因为这总是正确的,但是很多人都没有UITabBarController
的子类并将委托设置为它们自己的对象,例如MyTabBarControllerDelegate
,它只实现UITabBarControllerDelegate
。这基本上是将问题分开,以便代码可以以更模块化的方式构建。
这种情况看起来有点奇怪,因为通常委托分配是针对不同的类。例如,将视图控制器指定为UITableViewDelegate
的{{1}}。在这种情况下,大多数人不会将UITableView
作为子类,而是将UITableView
采用添加到包含UITableViewDelegate
的视图控制器,但代理范例对您来说足够灵活选择放置该功能的位置。