Что я хочу реализовать:
class func getSomeObject() -> [SomeObject]? {
let objects = Realm().objects(SomeObject)
return objects.count > 0 ? objects : nil
}
Как я могу вернуть объект, как [SomeObject]
если бы Results
?
Странно, ответ очень прямой. Вот как я это делаю:
let array = Array(results) // la fin
Array
созданный с помощью итератора результатов.Если вам абсолютно необходимо преобразовать его
Results
вArray
, имейте в виду, что этоResults
связано с производительностью и объемом памяти, так как это лениво. Но вы можете сделать это в одну строку, какresults.map { $0 }
в Swift 2.0 (илиmap(results) { $0 }
в 1.2).источник
map { $0 }
вернетсяLazyMapRandomAccessCollection
в Swift 3, так что ответ @Mazyod лучше.Я нашел решение. Создано расширение по результатам.
и используя как
источник
for var i = 0; i < count; i++
следует заменить наfor i in 0 ..< count
С Swift 4.2 это так же просто, как расширение:
Вся необходимая общая информация уже является частью,
Results
которую мы расширяем.источник
Это еще один способ преобразования
Results
в массив с расширением Swift 3 в одну строку.Для Swift 4 и Xcode 9.2
С Xcode 10
flatMap
устарела, вы можете использоватьcompactMap
для отображения.источник
Swift 3
использование
Альтернатива: использование дженериков
источник
не очень хорошая идея конвертировать результаты в массив, потому что результаты ленивы. Но если вам нужно попробовать это:
но лучший способ - передавать результаты везде, где вам нужно. Также вы можете конвертировать результаты в список вместо массива.
если первая функция не работает, вы можете попробовать это:
источник
Я не уверен, есть ли эффективный способ сделать это.
Но вы можете сделать это, создав массив Swift и добавив его в цикл.
Если вы чувствуете, что это слишком медленно. Я рекомендую вам обойти
Results
объект Realm напрямую.источник
Итак, вы можете использовать как:
источник
Решение для Swift 4, Realm 3
Теперь преобразование может быть сделано, как показано ниже
источник
источник