我在swift中使用了realm.io。 我有6个以上的数据。 我想选择随机4数据。
var words: Results<Word> {
get {
return Realm().objects(Word).filter("Limit(4)")
}
}
答案 0 :(得分:3)
这是我尝试创建一个随机函数。
就我而言,我必须从Realm DB中检索一个随机图像并显示它。所以我在Image类中创建了一个静态函数。
class Image: Object {
dynamic var filename = ""
static func randomImage() -> Image? {
let images = uiRealm.objects(Image)
if images.count == 0 {
return nil
}
let index = Int(arc4random_uniform(UInt32(images.count)))
return images[index]
}
}
//Get a random image
Image.randomImage()
至于限制功能,我并不真正看到它的必要性,但这是一种可行的方法:
class Image: Object {
dynamic var filename = ""
static func limitImages(limit: Int) -> [Image]? {
let images = uiRealm.objects(Image)
if images.count == 0 {
return nil
}
var limitImages: [Image] = []
for iter in 0..<limit {
if images.count < iter {
break
} else {
limitImages.append(images[iter])
}
}
return limitImages
}
}
//Get 5 images
Image.limitImages(5)
您可以将这些功能用作Realm扩展,执行以下操作:
extension Realm {
func random(type: Object.Type) -> Object? {
let objects = uiRealm.objects(type)
if objects.count == 0 {
return nil
}
let index = Int(arc4random_uniform(UInt32(objects.count)))
return objects[index]
}
}
//Get a random Animal
let myRealm = try! Realm()
myRealm.random(Animal)
或结果对象版本
extension Results {
func random() -> T? {
if self.count == 0 {
return nil
}
let index = Int(arc4random_uniform(UInt32(self.count)))
return self[index]
}
}
//Get a random row from any Object
let randomObject = myRealm.objects(Person).random()
答案 1 :(得分:2)
以数组的形式获取有限的域结果:
您基本上可以创建结果扩展(Realm库中的预定义类),如下所示:
import RealmSwift
import ObjectMapper
extension Results{
func get <T:Object> (offset: Int, limit: Int ) -> Array<T>{
//create variables
var lim = 0 // how much to take
var off = 0 // start from
var l: Array<T> = Array<T>() // results list
//check indexes
if off<=offset && offset<self.count - 1 {
off = offset
}
if limit > self.count {
lim = self.count
}else{
lim = limit
}
//do slicing
for i in off..<lim{
let dog = self[i] as! T
l.append(dog)
}
//results
return l
}
}
然后用法就是这样:
let realm = try! Realm()
realm.objects(NewsDb).filter("homepageCategory = 1").get(0, limit: 5)
PS。这是临时解决方案。优化是如果你替换for循环来为一些函数Swift函数做切片......
答案 2 :(得分:1)
Realm目前不支持直接限制,但您可以在0..<wordCount
范围内生成4个随机整数并使用它们来索引结果?
答案 3 :(得分:0)
Realm不支持随机对象拾取,但是您可以使用名为randomElement()
的函数,该函数将从给定列表中返回随机对象。如果列表为空,则该方法将返回nil
。来源=> https://developer.apple.com/documentation/swift/array/2994747-randomelement
在答案上方拾取特定数量的对象将起作用