我正在尝试加载包含相当大字典的plist,将其随机播放,然后保存随机播放的版本以便在应用中使用。我想我已经关闭了,但是我遇到了类型转换错误,当尝试设置experiments = shuffleArray(experiments)
时,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)
}
}
有什么想法吗?
答案 0 :(得分:0)
您从shuffleArray返回Array<T>
,但Array<T>
不是NSMutableArray
的子类型,因此您无法将其分配给experiments
变量。
如果你真的需要泛型,你应该对它们使用Array<T>
(除非你有一个具有不同类型对象的异源阵列,但这是非常罕见的,你应该仔细考虑它是否是你想要的)。
假设您知道所有类型都是例如Int,String或某些自定义类型(比如类实验),您应该使用类型数组,即Array<Int>
或Array<String>
或Array<Experiment>
experiments
,并且只使用泛型形式{{ 1}}用于shuffleArray。