Co chcę wdrożyć:
class func getSomeObject() -> [SomeObject]? {
let objects = Realm().objects(SomeObject)
return objects.count > 0 ? objects : nil
}
Jak mogę zwrócić obiekt, jakby [SomeObject]
zamiast tego Results
?
Dziwne, odpowiedź jest bardzo prosta. Oto jak to robię:
let array = Array(results) // la fin
Array
skonstruowany z iteratorem wyników.Jeśli absolutnie musisz przekonwertować swój program
Results
naArray
, pamiętaj, że istnieje narzut wydajności i pamięci, ponieważResults
jest leniwy. Ale możesz to zrobić w jednej linii, jakresults.map { $0 }
w swift 2.0 (lubmap(results) { $0 }
w 1.2).źródło
map { $0 }
powróciLazyMapRandomAccessCollection
w Swift 3, więc odpowiedź @Mazyod jest lepsza.Znalazłem rozwiązanie. Utworzono rozszerzenie w wynikach.
i używając like
źródło
for var i = 0; i < count; i++
należy zastąpićfor i in 0 ..< count
Dzięki Swift 4.2 jest to tak proste, jak rozszerzenie:
Wszystkie potrzebne informacje ogólne są już częścią,
Results
którą rozszerzamy.źródło
To kolejny sposób na konwersję
Results
do Array z rozszerzeniem z Swift 3 w jednej linii.Dla Swift 4 i Xcode 9.2
Z Xcode 10
flatMap
jest przestarzały, możesz go używaćcompactMap
do mapowania.źródło
Szybki 3
Stosowanie
Alternatywa: używanie typów ogólnych
źródło
nie jest dobrym pomysłem konwertowanie wyników na tablicę, ponieważ wyniki są leniwe. Ale jeśli potrzebujesz, spróbuj tego:
ale lepszym sposobem jest przekazywanie wyników w dowolnym miejscu. Możesz także przekonwertować wyniki na listę zamiast na tablicę.
jeśli pierwsza funkcja nie działa, możesz wypróbować tę:
źródło
Nie jestem pewien, czy istnieje jakiś skuteczny sposób, aby to zrobić.
Ale możesz to zrobić, tworząc tablicę Swift i dołączając ją w pętli.
Jeśli uważasz, że jest za wolno. Polecam ci
Results
bezpośrednio ominąć obiekt Realm .źródło
Możesz więc użyć:
źródło
Rozwiązanie dla Swift 4, Realm 3
Teraz konwersję można wykonać jak poniżej
źródło
źródło