"Not a 'subtype' error" 调用函数时

"Not a 'subtype' error" when calling function

我正在尝试加载一个包含相当大词典的 plist,将其打乱,然后保存打乱后的版本以供在应用程序中使用。我想我已经接近了,但是在尝试设置 experiments = shuffleArray(experiments).

时出现类型转换错误 'NSArray is not a subtype of 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)
        }
    }

有什么想法吗?

你 return Array<T> 来自 shuffleArray,但是 Array<T> 不是 NSMutableArray 的子类型,所以你不能将它分配给 experiments变量。

如果你真的需要泛型,你应该对它们都使用Array<T>(除非你有一个包含不同类型对象的异构数组,但这种情况非常罕见,你应该仔细考虑它是否是什么你想要)。

假设您知道所有类型都是Int、String 或一些自定义类型(例如 class Experiment),您应该使用类型化数组,即 Array<Int>Array<String>Array<Experiment> 用于 experiments 并且仅使用shuffleArray 的通用形式 Array<T>