답변:
이상하게도 대답은 매우 간단합니다. 내가하는 방법은 다음과 같습니다.
let array = Array(results) // la fin
Array
는 결과 반복자로 구성된 Swift를 반환 합니다.
당신이 절대적으로 변환해야하는 경우 Results
에 Array
, 염두에 두어야하기 때문에, 성능 및 메모리 오버 헤드가있다 Results
게으른입니다. 그러나 results.map { $0 }
swift 2.0 (또는 map(results) { $0 }
1.2) 과 같이 한 줄로 할 수 있습니다 .
map { $0 }
LazyMapRandomAccessCollection
Swift 3에서 반환 되므로 @Mazyod 답변이 더 좋습니다.
해결책을 찾았습니다. 결과에 확장을 만들었습니다.
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
}
for var i = 0; i < count; i++
다음으로 대체되어야합니다for i in 0 ..< count
이것은 한 줄로 Swift 3Results
확장을 사용하여 Array로 변환하는 또 다른 방법입니다 .
extension Results {
func toArray() -> [T] {
return self.map { $0 }
}
}
대한 스위프트 4 와 엑스 코드 9.2
extension Results {
func toArray<T>(type: T.Type) -> [T] {
return flatMap { $0 as? T }
}
}
로 엑스 코드 (10)가 flatMap
사용되지 않습니다 당신이 사용할 수있는 compactMap
매핑.
extension Results {
func toArray<T>(type: T.Type) -> [T] {
return compactMap { $0 as? T }
}
}
스위프트 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
}
대안 : 제네릭 사용
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
}
결과가 게으 르기 때문에 결과를 배열로 변환하는 것은 좋지 않습니다. 그러나 필요한 경우 다음을 시도하십시오.
func toArray<T>(ofType: T.Type) -> [T] {
return flatMap { $0 as? T }
}
그러나 더 좋은 방법은 필요할 때마다 결과를 전달하는 것입니다. 또한 Array 대신 Results를 List로 변환 할 수 있습니다.
List(realm.objects(class))
첫 번째 기능이 작동하지 않으면 다음을 시도하십시오.
var refrenceBook:[RefrenceProtocol] = []
let faceTypes = Array(realm.objects(FaceType))
refrenceBook = faceTypes.map({$0 as FaceType})
효율적인 방법이 있는지 확실하지 않습니다.
그러나 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
}
기분이 너무 느리다. Realm Results
객체를 직접 전달하는 것이 좋습니다 .