Хранение данных в классе
Поэтому в настоящее время я работаю над своим первым большим проектом, и мне было интересно, есть ли способ поместить данные в один класс, а затем просто переписать их или создать экземпляр для класса. У меня есть данные, которые загружаются в первый ViewController, и если я хочу использовать их на всех своих 5 ViewController, я просто передаю их с помощью делегатов и делаю много дубликатов. Поскольку этот способ очень неэффективен и к тому же беспорядок, я хотел бы хранить их в одном классе. Когда я создал собственный класс для этих данных, при переходе на другой ViewController данные мгновенно удаляются. Любой совет будет оценен по достоинству!:)
1 ответ
У вас есть несколько вариантов доступа к одному и тому же фрагменту данных из разных мест. Способ использования полностью зависит от ваших потребностей. Вот несколько вариантов:
Внедрение зависимости: вот хороший пост об этом. Это наличие некоторых данных в одном виртуальном канале и их внедрение в следующий. Это хороший подход, если вам не нужно сохранять данные и другие объекты, от которых зависят.
Делегирование: вы можете заставить виртуальный канал передавать данные своему делегату после того, как что-то произойдет (например, пользовательское нажатие, вы завершили загрузку некоторых данных и т. Д.).
Центр уведомлений: вы можете отправить уведомление в рамках приложения и сделать любой объект (например, ViewController) для наблюдения за конкретными уведомлениями. Вы можете отправлять данные вместе с уведомлениями.
Шаблон проектирования синглтонов: вы можете использовать синглтоны в 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.
Надеюсь, это поможет!