如何将Realm中类的所有对象都添加到数组中

JDG*_*JDG 7 realm swift

目前我正在使用这个:

    var matchedUsersFromRealm = MatchedUser.allObjects()
    var matchedUsersInRealm = RLMArray(objectClassName: MatchedUser.className())
    matchedUsersInRealm.removeAllObjects()
    matchedUsersInRealm.addObjects(matchedUsersFromRealm)
Run Code Online (Sandbox Code Playgroud)

但它看起来很麻烦,而不仅仅是它应该(或做到了?).也许有更好的方法?

PS,我正在研究混合项目,不知怎的,我只能使用Objective-C版本并将其桥接到我的快速项目中.所以Realm().objects()不可用,即使它返回的结果不是数组.

Ixx*_*Ixx 22

您可以添加以下扩展程序:

import Foundation
import RealmSwift

extension Results {

    func toArray() -> [T] {
        return self.map{$0}
    }
}

extension RealmSwift.List {

    func toArray() -> [T] {
        return self.map{$0}
    }
}
Run Code Online (Sandbox Code Playgroud)

然后取出时:

do {
    let realm = try Realm()
    let objs = realm.objects(MyObjType).toArray() 
    // ...

} catch _ {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

(如果你使用的是Swift pre-2.0,请删除do try catch)

请注意,这会立即将所有内容加载到内存中,在某些情况下可能不需要.如果您在后台获取,则需要它,因为Realm当前不支持在主线程中使用对象(在这种情况下,您还必须将数组映射到非Realm对象).


Rik*_*edi 5

我更喜欢添加一个帮助类来使用泛型保存和检索任何类型的对象。

class RealmHelper {
    static func saveObject<T:Object>(object: T) {
        let realm = try! Realm()
        try! realm.write {
            realm.add(object)
        }
    }
    static func getObjects<T:Object>()->[T] {
        let realm = try! Realm()
        let realmResults = realm.objects(T.self)
        return Array(realmResults)

    }
    static func getObjects<T:Object>(filter:String)->[T] {
        let realm = try! Realm()
        let realmResults = realm.objects(T.self).filter(filter)
        return Array(realmResults)

    }
}
Run Code Online (Sandbox Code Playgroud)