无法在swift中将“Any”类型的值转换为指定的类型

时间:2017-02-09 09:38:07

标签: arrays swift nsmutablearray

我创建了一个如下所示的数组

var childControllers = NSArray()
childControllers = NSArray(objects: OBDPage1, OBDPage2, OBDPage3, OBDPage4)
self.loadScrollView(page: 0)// calling method

现在我想使用下面的数组对象

func loadScrollView(page: Int){ // method
    if page >= childControllers.count {
        return
    }
    // replace the placeholder if necessary
    let controller: OBDPage1ViewController? = childControllers[page]
}

但我收到的错误

  

Swift-CarAssist / Swift-CarAssist / OBDCarMonitorDeatilViewController.swift:90:67:无法将'Any'类型的值转换为指定类型'OBDPage1ViewController?'

任何人都可以告诉我自己哪里出错了,因为我是swift的新手。

提前致谢。 普里

2 个答案:

答案 0 :(得分:3)

在Swift中工作,您可能正在使用Swift Array而不是NSArray

var childControllers = [UIViewController]()
childControllers = [OBDPage1,OBDPage2,OBDPage3,OBDPage4]
self.loadScrollView(page: 0)// calling method

然后

func loadScrollView(page: Int){ // method

    if page >= childControllers.count {
        return
    }

    // replace the placeholder if necessary
    let controller = childControllers[page] as? OBDPage1ViewController

}

答案 1 :(得分:2)

试试这个:

let controller = childControllers[page] as! OBDPage1ViewController

您必须将数组值显式地转换为OBDPage1ViewController,否则它只是Any类型。

修改

为了更安全,建议您使用if-let条件绑定执行此操作。

if let controller = childControllers[page] as? OBDPage1ViewController {
    //do something    
}