我有一个返回NSArray的函数,如下所示
func papulateViewControllers() -> NSArray{
let chatVC = ChatsVC(nibName:"ChatsVC", bundle:NSBundle.mainBundle())
let contactVC = ContactsVC(nibName:"ContactsVC", bundle:NSBundle.mainBundle())
let notificationVC = NotificationsVC(nibName:"NotificationsVC", bundle:NSBundle.mainBundle())
let chatNav = UINavigationController()
chatNav.viewControllers = [chatVC]
let contactNav = UINavigationController()
contactNav.viewControllers = [contactVC]
let notifNav = UINavigationController()
notifNav.viewControllers = [notificationVC]
return [chatNav, contactNav, notifNav]
}//end papulateViewControllers
我正在调用这种方法
var tabs = UITabBarController()
tabs.viewControllers = papulateViewControllers() as [AnyObject]
但是我收到了这个错误 无法将类型'[AnyObject]'的值分配给'[UIViewController]类型的值?'
需要建议修复此错误,并优化上述功能。
答案 0 :(得分:2)
你不应该在Swift中使用NSArray
,使用本机数组。 NSArray
没有强类型推断,因为它们给你AnyObject
s,而Swift数组只包含一种类型,并且具有强类型推断。
当您的函数返回一个视图控制器数组时,将其返回类型更改为[UIViewController]
,然后您可以直接指定其返回值而不使用强制转换(as [AnyObject]
)。
func papulateViewControllers() -> [UIViewController] {
//Leave code the same
}
然后将其用作
var tabs = UITabBarController()
tabs.viewControllers = papulateViewControllers() // No cast required