【问题标题】:Cannot assign a value of type '[AnyObject]' to a value of type '[UIViewController]?'无法将“[AnyObject]”类型的值分配给“[UIViewController]”类型的值?
【发布时间】:2015-09-24 02:02:16
【问题描述】:

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

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

【问题讨论】:

    标签: ios xcode swift2


    【解决方案1】:

    你不应该在 Swift 中使用NSArray,使用原生数组。 NSArrays 没有强类型推断,因为他们给了你AnyObjects,Swift 数组只包含一种类型并且具有强类型推断。

    当您的函数返回一个视图控制器数组时,将其返回类型更改为[UIViewController],然后您可以直接分配其返回值而无需强制转换 (as [AnyObject])。

    func papulateViewControllers() -> [UIViewController] {
        //Leave code the same
    }
    

    然后把它当作

    var tabs = UITabBarController()
    tabs.viewControllers = papulateViewControllers() // No cast required
    

    【讨论】:

    • 这样就解决了问题。谢谢...我错过了原生数组点。
    • 我已经将它标记为接受。感谢您的快速帮助,并提醒您忘记的概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多