Apa yang ingin saya terapkan:
class func getSomeObject() -> [SomeObject]? {
let objects = Realm().objects(SomeObject)
return objects.count > 0 ? objects : nil
}
Bagaimana saya bisa mengembalikan objek seolah- [SomeObject]
olah jika Results
?
Array
dibangun dengan hasil iterator.Jika Anda benar-benar harus mengonversi
Results
keArray
, ingat ada kinerja dan memori overhead, karenaResults
malas. Tetapi Anda bisa melakukannya dalam satu baris, sepertiresults.map { $0 }
pada swift 2.0 (ataumap(results) { $0 }
1.2).sumber
map { $0 }
akan kembaliLazyMapRandomAccessCollection
dalam Swift 3, jadi jawaban @Mazyod lebih baik.Saya menemukan solusinya. Ekstensi dibuat pada Hasil.
dan menggunakan like
sumber
for var i = 0; i < count; i++
harus diganti denganfor i in 0 ..< count
Dengan Swift 4.2, sesederhana ekstensi:
Semua informasi generik yang diperlukan sudah menjadi bagian dari
Results
yang kami sampaikan.sumber
Ini cara lain untuk mengkonversi
Results
menjadi Array dengan ekstensi dengan Swift 3 dalam satu baris.Untuk Swift 4 dan Xcode 9.2
Dengan Xcode 10
flatMap
sudah usang Anda dapat menggunakancompactMap
untuk pemetaan.sumber
Cepat 3
Pemakaian
Alternatif: Menggunakan obat generik
sumber
itu bukan ide yang baik untuk mengonversi Hasil ke Array, karena Hasil malas. Tetapi jika Anda perlu mencoba ini:
tetapi cara yang lebih baik adalah memberikan Hasil di mana pun Anda butuhkan. Anda juga dapat mengonversi Hasil ke Daftar alih-alih Array.
jika fungsi pertama tidak berfungsi, Anda dapat mencoba yang ini:
sumber
Saya tidak yakin, apakah ada cara efisien untuk melakukan ini.
Tetapi Anda bisa melakukannya dengan membuat array Swift dan menambahkannya dalam loop.
Jika Anda merasa itu terlalu lambat. Saya sarankan Anda untuk membagikan
Results
objek Realm secara langsung.sumber
Jadi, Anda bisa menggunakan like:
sumber
Solusi untuk Swift 4, Realm 3
Sekarang konversi dapat dilakukan seperti di bawah ini
sumber
sumber