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