【发布时间】:2015-07-06 04:50:48
【问题描述】:
知道如何为RLMResults 随机随机播放吗?我无论如何都找不到通过RLMSortDescriptor 来做这件事。
我尝试编写自己的交换算法,但它给了我错误(无法分配给这个表达式的结果*)。
func simpleRandomSwap(rlmobjects:RLMResults!) -> RLMResults! {
if (rlmobjects != nil && rlmobjects.count > 0) {
let indexcount = Int(rlmobjects.count)
for (var i=0 ; i<indexcount; i++) {
let randomUInt:UInt = UInt(arc4random_uniform(UInt32(indexcount)))
let myuint = UInt(i)
// simple swap
var temp = rlmobjects.objectAtIndex(myuint)
rlmobjects.objectAtIndex(randomUInt) = rlmobjects.objectAtIndex(myuint)
rlmobjects.objectAtIndex(myuint) = temp
} // end for loop
}
return rlmobjects
}
【问题讨论】:
-
我认为你必须将你的 RLMResults 对象转换为 NSMutableArray 而不是改组它。
-
有没有更直接的方法来实现这一点?转换为 NSMutableArray 需要另一个 for 循环,这会导致一些不必要的性能损失,IMO
-
我也有同样的想法,但问题是 i) 与 NSSortDescriptor 不同,RLMSortDescriptor 不将 NSComparator 作为参数,因此您在获取数据时不能进行洗牌。 ii) RLMReults 不会让你在运行时替换它的对象。
-
在 Objective-C 中,我会在一行代码中使用 KVC 将 RLMResults 转换为 NSMutableArray,如下所示 [[rlmobjects valueForKey:@"self"].mutableCopy,类似于 rlmobjects.valueForKey(“ self”) 不能快速实现?