RealmSwift:将结果转换为Swift数组

我想要实现的是:

class func getSomeObject() -> [SomeObject]? { let objects = Realm().objects(SomeObject) return objects.count > 0 ? objects : nil } 

如果返回对象作为[SomeObject]而不是Results

奇怪的是,答案非常简单。 下面是我如何做到这一点:

 let array = Array(results) // la fin 

如果您绝对必须将您的Results转换为Array ,请记住,由于Results是懒惰的,因此存在性能和内存开销。 但是你可以在一行中做到,就像swift 2.0中的results.map { $0 } (或者1.2中的map(results) { $0 } )。

我find了解决scheme。 在结果上创build扩展。

 extension Results { func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for i in 0 ..< count { if let result = self[i] as? T { array.append(result) } } return array } } 

和使用像

 class func getSomeObject() -> [SomeObject]? { let objects = Realm().objects(SomeObject).toArray(SomeObject) as [SomeObject] return objects.count > 0 ? objects : nil } 

Swift 3

 extension Results { func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for i in 0 ..< count { if let result = self[i] as? T { array.append(result) } } return array } } 

用法

 class func getSomeObject() -> [SomeObject]? { let defaultRealm = try! Realm() let objects = defaultRealm.objects(SomeObject.self).toArray(ofType : SomeObject.self) as [SomeObject] return objects.count > 0 ? objects : nil } 

另类:使用generics

 class func getSomeObject() -> [T]? { let objects = Realm().objects(T.self as! Object.Type).toArray(ofType : T.self) as [T] return objects.count > 0 ? objects : nil } 

我不确定,如果有任何有效的方法来做到这一点。

但你可以通过创build一个Swift数组并将其追加到循环中来实现。

 class func getSomeObject() -> [SomeObject]? { var someObjects: [SomeObject] = [] let objects = Realm().objects(SomeObject) for object in objects{ someObjects += [object] } return objects.count > 0 ? someObjects : nil } 

如果你觉得太慢了。 我build议你直接传递Realm Results对象。

将结果转换为数组不是一个好主意,因为结果是懒惰的。 但是,如果你需要尝试这个:

 func toArray<T>(ofType: T.Type) -> [T] { return flatMap { $0 as? T } } 

但更好的方法是通过结果,无论你需要。 您也可以将结果转换为列表而不是数组。

 List(realm.objects(class)) 

如果第一个func不工作,你可以试试这个:

 var refrenceBook:[RefrenceProtocol] = [] let faceTypes = Array(realm.objects(FaceType)) refrenceBook = faceTypes.map({$0 as FaceType})