这是代码。
var item = self.tabBarController?.tabBar.items?[1] as! UITabBarItem
这会导致这样的错误。 "来自UITabBarItem的Downcast?"到' UITabBarItem'只打开选项;你是男人使用'!'?"
并且冗余错误。这是代码
class PrivateViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource, UIActionSheetDelegate, MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate {}
这会导致这样的错误。 "' PrivateViewController'的冗余一致性到protocal' UITableViewDataSource" 谁知道解决方案?
答案 0 :(得分:1)
1)在Swift 2中,items
的属性UITabBar
被声明为[UITabBarItem]?
。
如果总有至少两个标签栏项目可以写
var item = self.tabBarController!.tabBar.items![1]
因为编译器知道类型。如果不使用适当的可选绑定。
2)UITableViewController
默认符合UITableViewDelegate
和UITableViewDataSource
。删除代码中的两个。
答案 1 :(得分:1)
好吧,UITabBarController
的标签栏项目已经输入为UITabBarItem
,因此将它们转换为相同类型是没有意义的。这是编译器所说的。唯一需要的是打开可选项,因为你没有得到真正的UITabBarItem
,而是一个可选的UITabBarItem
。如果您确定索引1下面有一个条形项,您可以强行打开它:self.tabBarController?.tabBar.items?[1]!
。
(顺便说一句,这是一个叫做泛型的东西,它与Objective-C时代产生了不同。在Objective-C中,有一系列东西会“剥离”这些东西的类型,所以我们经常不得不将它们转换为精确类型。在Swift中,数组“保留”存储在其中的事物的类型,因此当您从数组中获取项目时,编译器已经知道它的精确类型。顺便说一句,{{3 }}。)
关于您的第二个问题,您的类继承了UITableViewController
已经符合UITableViewDelegate
和UITableViewDataSource
的问题,因此再次声明一致性毫无意义。