目前我正在使用它:
var matchedUsersFromRealm = MatchedUser.allObjects()
var matchedUsersInRealm = RLMArray(objectClassName: MatchedUser.className())
matchedUsersInRealm.removeAllObjects()
matchedUsersInRealm.addObjects(matchedUsersFromRealm)
但它看起来很麻烦,而不仅仅是它应该(或做到了?)。也许有更好的方法?
PS,我正在研究混合项目,不知怎的,我只能使用Objective-C版本并将其桥接到我的快速项目中。因此Realm()。objects()不可用,即使它返回的结果不是数组。答案 0 :(得分:19)
您可以添加以下扩展程序:
import Foundation
import RealmSwift
extension Results {
func toArray() -> [T] {
return self.map{$0}
}
}
extension RealmSwift.List {
func toArray() -> [T] {
return self.map{$0}
}
}
然后拿取:
do {
let realm = try Realm()
let objs = realm.objects(MyObjType).toArray()
// ...
} catch _ {
// ...
}
(如果您使用Swift pre-2.0,请删除尝试捕捉)
请注意,这会立即将所有内容加载到内存中,在某些情况下可能不需要。如果您在后台获取,则需要它,因为Realm目前不支持在主线程中使用对象(您还必须将数组映射到非Realm)在这种情况下的对象)。
答案 1 :(得分:1)
您可以在一行中获取User的所有对象:
let matchedUsers = Realm().objects(MatchedUser)
答案 2 :(得分:1)
RLMArray
用于表示多对多关系。 RLMResults
用于表示数据库查询的结果。但是,如果您正在寻找一个普通的Swift阵列(并且可以使用与RLMResults
相比的性能权衡),那么您可以map(MatchedUser.allObjects()) { $0 }
答案 3 :(得分:0)
因为RLMResults是一个延迟加载数组。因此,如果要返回数组,只需为结果编写扩展名即可。 例如:
{{1}}
答案 4 :(得分:0)
我更喜欢添加一个帮助器类,以使用泛型来保存和检索任何类型的对象。
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)
}
}