Ios &引用;不是一个';亚型';“错误”;调用函数时

Ios &引用;不是一个';亚型';“错误”;调用函数时,ios,swift,casting,Ios,Swift,Casting,我试图加载一个包含一个相当大的字典的plist,对它进行洗牌,然后保存洗牌后的版本,以便在应用程序中使用。我想我已经接近了,但在尝试设置实验=shuffleArray(实验)时,我遇到了一个类型转换错误,“NSArray不是NSMutableArray的子类型” 以下是相关代码: var experiments = NSMutableArray() var menuIndex = 0 override init() { super.init() // Create the da

我试图加载一个包含一个相当大的字典的plist,对它进行洗牌,然后保存洗牌后的版本,以便在应用程序中使用。我想我已经接近了,但在尝试设置
实验=shuffleArray(实验)
时,我遇到了一个类型转换错误,“NSArray不是NSMutableArray的子类型”

以下是相关代码:

var experiments = NSMutableArray()
var menuIndex = 0

override init() {
    super.init()
    // Create the data model.
    func shuffleArray<T>(var array: Array<T>) -> Array<T>
    {
        for var index = array.count - 1; index > 0; index--
        {
            // Random int from 0 to index-1
            var j = Int(arc4random_uniform(UInt32(index-1)))

            // Swap two array elements
            // Notice '&' required as swap uses 'inout' parameters
            swap(&array[index], &array[j])
        }
        return array
    }
    if let path = NSBundle.mainBundle().pathForResource("experiments", ofType: "plist") {
        if let dict = NSDictionary(contentsOfFile: path) {
            experiments.addObjectsFromArray(dict.objectForKey("experiments") as NSArray)

            experiments = shuffleArray(experiments)
        }
    }
var-experiments=NSMutableArray()
变量menuIndex=0
重写init(){
super.init()
//创建数据模型。
func shufflarray(变量数组:数组)->array
{
对于var index=array.count-1;index>0;index--
{
//从0到索引-1的随机整数
var j=Int(arc4random_uniform(UInt32(索引-1)))
//交换两个数组元素
//请注意,交换使用“inout”参数时需要“&”
交换(&array[index],&array[j])
}
返回数组
}
如果let path=NSBundle.mainBundle().pathForResource(“实验”,类型为“plist”){
如果let dict=NSDictionary(contentsOfFile:path){
experiments.addObjectsFromArray(dict.objectForKey(“实验”)作为NSArray)
实验=随机播放(实验)
}
}
有什么想法吗?

您可以从Shufferray返回
数组
,但是
数组
不是
NSMutableArray
的子类型,因此无法将其分配给
实验
变量

如果你真的需要泛型,你应该对它们都使用
Array
(除非你有一个具有不同类型对象的异质数组,但这是非常罕见的,你应该仔细考虑它是否是你想要的)


假设您知道所有类型都是Int、String或某个自定义类型(比如课堂实验),您应该使用类型化数组,即
数组
数组
数组
用于
实验
,对于shuffleArray只能使用泛型形式
数组

谢谢您的回答。我现在正在尝试,但我不确定如何实现您关于使用数组进行“实验”的建议。你能提供指导吗?这或多或少让我达到了目的。我最终在shuffle func中完成了NSMutableArray。谢谢你的帮助,Teemu!如果有帮助的话,我很高兴。如果你需要NSArray和NSMutableArray,那么你的数组可能包含你稍后强制转换的未知类型的对象,或者包含多种类型的对象。在其他CA中你应该可以直接投下它。