我有一个在Objective-C中随机移动一个数组的方法,它工作的很好,但是我在转换它时遇到了一些麻烦。
- (NSArray *)shuffle:(NSArray *)array {
NSMutableArray *newArray = [NSMutableArray arrayWithArray:array];
NSUInteger count = [newArray count];
for (NSUInteger i = 0; i < count; i++) {
NSInteger remainingCount = count - i;
NSInteger exchangeIndex = i + arc4random_uniform((u_int32_t)remainingCount);
[newArray exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex];
}
return [NSArray arrayWithArray:newArray];
}
这是这个方法的Swift版本,在我的“figure out error”注解下面,它抛出了一个错误,说“Ambiguous use of operator '+'”。我只是尝试将“remaining count”转换为arc_4random方法的UInt 32,所以我不确定是怎么回事。有什么想法吗?谢谢!
func shuffle(array: NSArray) -> NSArray {
let newArray : NSMutableArray = NSMutableArray(array: array)
let count : NSInteger = newArray.count
for var i = 0; i < count; ++i {
var remainingCount = count - i
//figre out error below
var exchangeIndex = i + arc4random_uniform(UInt32(remainingCount))
newArray.exchangeObjectAtIndex(i, withObjectAtIndex: exchangeIndex)
}
return NSArray(array: newArray)
}
3条答案
按热度按时间pxyaymoc1#
试试这个
更新的工作代码
将arc4random_uniform的结果强制转换为Int
9lowa7mx2#
雨燕4.2
现在,从Swift 4.2开始,这个特性已经内置到Swift中了。你可以在原地对一个数组进行洗牌,也可以创建一个新的洗牌数组。
uttx8gqw3#
如何随机播放数组
为什么你的代码不能编译,在@z_px的注解中有解释