Хранение данных в классе

поэтому в настоящее время я работаю над своим первым большим проектом, и мне было интересно, есть ли способ поместить данные в один класс, а затем просто переписать их или создать экземпляр для класса. У меня есть данные, которые загружаются в первый ViewController, и если я хочу использовать их во всех своих 5 ViewController, я просто передаю их с помощью делегатов и делаю много дубликатов. Поскольку этот способ очень неэффективен, а также запутан, я бы хотел, чтобы они хранились в одном классе. Когда я создал собственный класс для этих данных, при переходе на другой ViewController данные мгновенно удаляются. Любой совет будет оценен! :)


person Pepa    schedule 01.05.2020    source источник


Ответы (1)


У вас есть несколько вариантов доступа к одному и тому же фрагменту данных из разных мест. То, как вы используете, полностью зависит от ваших потребностей. Вот несколько вариантов:

  • Внедрение зависимостей: здесь — хороший пост об этом. Это имеет некоторые данные в одном VC и вводит их в следующий. Это хороший подход, если вам не нужно сохранять данные и другие объекты, зависящие от него.

  • Делегирование. Вы можете заставить VC передавать данные своему делегату после того, как что-то произойдет (например, пользователь нажмет, вы закончите загрузку некоторых данных и т. д.).

  • Центр уведомлений: вы можете отправлять уведомления в рамках приложения. и сделать любой объект (например, ViewController) для наблюдения за конкретными уведомлениями. Вы можете отправлять данные вместе с уведомлениями.

  • Шаблон проектирования Singleton: вы можете использовать синглтоны в Swift следующим образом:

class MySingleton {
  static let shared = MySingleton()

  var name = ""
}

// Assign name variable somewhere (i.e. in your first VC after downloading data)
MySingleton.shared.name = "Bob"

// In some other ViewController
myLabel.text = MySingleton.shared.name
  • UserDefaults: это хранилище, которое вы можете использовать для хранения небольшие фрагменты данных. Имейте в виду, что это не база данных, она будет сохранять ваши данные между запусками приложения, но вы не должны использовать ее для хранения больших объемов данных.

  • CoreData: это платформа сохранения данных для iOS, как вы бы сделали в БД на стороне сервера. Это не совсем БД, потому что вы не обращаетесь к диску напрямую каждый раз, когда читаете/записываете, CoreData загружает все свое содержимое в память для доступа к нему. У вас есть сторонние библиотеки для работы с локальным сохранением, например Realm.

Надеюсь, поможет!

person Rouger    schedule 01.05.2020
comment
Шаблон проектирования singleton работал так, как я хотел. Спасибо! - person Pepa; 02.05.2020