Lo que quiero implementar:
class func getSomeObject() -> [SomeObject]? {
let objects = Realm().objects(SomeObject)
return objects.count > 0 ? objects : nil
}
¿Cómo puedo devolver un objeto como [SomeObject]
si en su lugar Results
?
Extraño, la respuesta es muy sencilla. Así es como lo hago:
let array = Array(results) // la fin
Array
construido con el iterador de resultados.Si es absolutamente necesario convertir
Results
aArray
, tenga en cuenta que hay una sobrecarga de rendimiento y la memoria, ya queResults
es perezoso. Pero puede hacerlo en una línea, comoresults.map { $0 }
en swift 2.0 (omap(results) { $0 }
en 1.2).fuente
map { $0 }
regresaráLazyMapRandomAccessCollection
en Swift 3, por lo que la respuesta de @Mazyod es mejor.Encontré una solución. Extensión creada en los resultados.
y usando como
fuente
for var i = 0; i < count; i++
debe ser reemplazado confor i in 0 ..< count
Con Swift 4.2 es tan simple como una extensión:
Toda la información genérica necesaria ya es parte de la
Results
cual ampliamos.fuente
Esta es otra forma de convertir
Results
en Array con una extensión con Swift 3 en una sola línea.Para Swift 4 y Xcode 9.2
Con Xcode 10
flatMap
está en desuso, puede usarlocompactMap
para el mapeo.fuente
Swift 3
Uso
Alternativa: uso de genéricos
fuente
no es una buena idea convertir Results a Array, porque Results es vago. Pero si necesitas probar esto:
pero la mejor manera es pasar resultados donde lo necesite. También puede convertir Resultados a Lista en lugar de Array.
Si el primer func no funciona, puede probar este:
fuente
No estoy seguro, si hay alguna manera eficiente de hacer esto.
Pero puede hacerlo creando una matriz Swift y anexándola en el bucle.
Si sientes que es demasiado lento. Te recomiendo que pases el
Results
objeto Realm directamente.fuente
Entonces, puedes usar como:
fuente
Solución para Swift 4, Reino 3
Ahora la conversión se puede hacer de la siguiente manera
fuente
fuente