O que eu quero implementar:
class func getSomeObject() -> [SomeObject]? {
let objects = Realm().objects(SomeObject)
return objects.count > 0 ? objects : nil
}
Como posso retornar um objeto como [SomeObject]
se Results
?
Estranho, a resposta é muito direta. Aqui está como eu faço isso:
let array = Array(results) // la fin
Array
construído com o iterador de resultados.Se você absolutamente precisa converter o seu
Results
paraArray
, lembre-se de que há uma sobrecarga de desempenho e memória, poisResults
é preguiçoso. Mas você pode fazer isso em uma linha, comoresults.map { $0 }
no swift 2.0 (oumap(results) { $0 }
no 1.2).fonte
map { $0 }
retornaráLazyMapRandomAccessCollection
no Swift 3, então a resposta do @Mazyod é melhor.Eu encontrei uma solução. Extensão criada em Resultados.
e usando como
fonte
for var i = 0; i < count; i++
deve ser substituído porfor i in 0 ..< count
Com o Swift 4.2, é tão simples quanto uma extensão:
Todas as informações genéricas necessárias já fazem parte das
Results
quais estendemos.fonte
Essa é outra maneira de converter
Results
em Array com uma extensão com o Swift 3 em uma única linha.Para Swift 4 e Xcode 9.2
Com o Xcode 10
flatMap
está obsoleto, você pode usarcompactMap
para mapear.fonte
Swift 3
Uso
Alternativa: Usando genéricos
fonte
não é uma boa ideia converter Resultados em Matriz, porque Resultados é preguiçoso. Mas se você precisar, tente o seguinte:
mas a melhor maneira é passar os Resultados sempre que precisar. Além disso, você pode converter Resultados em Lista em vez de Matriz.
se a primeira função não estiver funcionando, você pode tentar esta:
fonte
Não tenho certeza, se existe alguma maneira eficiente de fazer isso.
Mas você pode fazer isso criando uma matriz Swift e anexando-a no loop.
Se você sentir que é muito lento. Eu recomendo que você passe
Results
diretamente o objeto Realm .fonte
Então, você pode usar como:
fonte
Solução para Swift 4, Domínio 3
Agora a conversão pode ser feita como abaixo
fonte
fonte