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