无法将类型'[AnyObject]'的值赋给类型'[UIViewController]的值?'

时间:2015-09-23 17:34:51

标签: ios xcode swift2

我有一个返回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]类型的值?'

需要建议修复此错误,并优化上述功能。

1 个答案:

答案 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