swift – 无法推断通用参数的参数

前端之家收集整理的这篇文章主要介绍了swift – 无法推断通用参数的参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图保存一个数组与NSUserDefaults然后加载数组,但我得到错误“参数的通用参数不能推断。有什么我做错了吗?没有人似乎在迅速有这个问题,所以我找不到任何解决方案。
IBAction func loadData(sender: AnyObject) {
    if let testCompositeArray = defaults.objectForKey("testscoreSATArray") as? Array {        
        self.showDataLabel.text = defaults.objectForKey("testscoreSATArray") as Array
    }
}
收到原始错误的原因是,在Swift中,Array是一个保存特定类型值的通用容器。所以你可以有一个Array< Int> ,其保存整数,或者Array< String>保存字符串。但你不能只有一个数组。数组包含的东西的类型是泛型参数,Swift是抱怨,因为它无法弄清楚该类型应该是什么。有时它可以从它周围的代码的上下文推断类型,但不总是,在这种情况下。

你可以通过给出你存储的东西的类型来解决问题:

IBAction func loadData(sender: AnyObject) {
    if let testCompositeArray = defaults.objectForKey("testscoreSATArray") as? Array<Int> {

            self.showDataLabel.text = toString(testCompositeArray)
    }
}

而不是写Array< Int&gt ;,你可以写较短的形式,[Int] 你也可以使用NSArray解决问题,正如你已经发现的。与Array不同,NSArray不使用泛型,因为它起源于具有与Swift不同的方法的Objective-C。相反,NSArray只保留一种东西,一个AnyObject。这是一个可以指向任何类的实例的引用。 然而,使用NSArray和AnyObject有一个很大的缺点,那就是每次使用它们包含的值时,你经常必须将值“转换”为一个真实的东西,如整数或字符串。这可能是一个痛苦,更糟的是,有时可能会导致错误,当你假设你有一种事情,实际上你有另一个。 Swift通常鼓励你更具体的类型,以避免这样的错误

猜你在找的Swift相关文章