2015-05-07 46 views
0

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

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

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

回答

0

如图UITabBarController Class Reference不像UITabBarDelegate例如的UITabBarController默认不符合UITabBarControllerDelegate,所以是的,有必要明确写入self.delegate = self为了使委托方法被调用。并且不想重复自己,仅将代表对象视为自定义控制器对象

0

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

如果UITabBarController实现UITabBarControllerDelegate被要求,那么你就不需要self.delegate = self线,因为这将永远是真实的,但很多人不继承UITabBarController和委托设置为自己的对象,像MyTabBarControllerDelegate只实现UITabBarControllerDelegate 。这基本上是分离的问题,所以代码可以用更模块化的方式来构建。

这种情况看起来有点奇怪,因为通常情况下,委托分配是不同的类。例如,将视图控制器分配为UITableViewUITableViewDelegate。在这种情况下,大多数人不会继承UITableView的子类,而是将UITableViewDelegate采用添加到包含UITableView的视图控制器,但委托范例足够灵活,您可以选择放置该功能的位置。