委托财产与协议采用

时间:2015-05-07 10:08:17

标签: ios swift delegation

如果我已经在类声明的顶部宣布采用特定协议,那么将视图控制器的属性delegate设置为self的目的是什么。我提供了一些例子:

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

是否有必要明确写出self.delegate = self以及为什么?我想重复自己。

2 个答案:

答案 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的视图控制器,但代理范例对您来说足够灵活选择放置该功能的位置。