Списки ресурсов и быстрые массивы

Я хотел бы использовать Realm для сохранения данных, так как кажется, что намного проще учиться и использовать, чем Core Data.
Некоторые аспекты, однако, пока не ясны для меня, одним из них является использование списков Realm.

Например, у меня теперь есть что-то вроде этого:

class Foo {
    var a: String
    var b: [Bar]
    var average: Double {
        return Double(b.reduce(0.0, combine: {$0 + $1.c})) / Double(b.count);
    }
    //...

}

class Bar {
    var c: Float
    var d: NSDate
    //...
}

Как я понимаю, мне нужно использовать Realm List над Swift Array, чтобы сделать отношения "to-many".
В дополнение к вычислению среднего (как в коде), я использую массив foo.b для заполнения tableview и в некоторых циклах for in. Я также сопоставляю его с другими массивами и использую его функцию filter().

Теперь, должен ли я использовать Realm List или должен ли я сопоставить его с родным Swift Array, а затем использовать это вместо (для целей производительности и простоты)?

+6
источник поделиться
1 ответ

Общий совет заключается в том, что если вам не нужно переходить с List<T> на [T], если это не необходимо. Для этого есть две причины:

  • List<T> - это живой просмотр данных, а не моментальный снимок момента.
  • List<T> может избежать создания экземпляра T для многих вычислений.

Живой просмотр

List<T> экземпляры предоставляют живой просмотр данных, а не моментальный снимок момента. Вы можете передать его контроллеру вида, и его содержимое будет обновляться после того, как другие части вашего приложения обновят объекты, которые он содержит.

Эффективность

List<T> и методы, которые он предоставляет, во многих случаях могут избежать экземпляров T. Например, вы можете отфильтровать List с помощью NSPredicate, и для этого Realm не нуждается в создании объектов Swift в памяти. Другим случаем будет вычисленное свойство average в вашем примере. Его можно было бы записать так (если b теперь List<Bar>):

var average: Double {
    return b.average("c") as Double?
}

Это вычислит среднее значение по базовым значениям в Царстве без материализации экземпляров Bar.

+9
источник

Посмотрите другие вопросы по меткам или Задайте вопрос