Правильный способ хранения и передачи данных между классами

У меня есть класс класса Users и Login (в отдельных файлах), где данные инициализируются и получают сначала в классе Login, а затем сохраняются в классе Users для будущего использования в других классах. Чтобы использовать переменные из класса Users, кажется, что я должен постоянно инициализировать его, который сбрасывает значения в классе. Как я могу получить переменные без постоянной инициализации?

Что это сейчас:

Данные получены в Login.swift -> Данные передаются в Users.swift -> Невозможно отображать данные, хранящиеся в User.swift в ViewController.swift

Что я ищу:

Данные получены в Login.swift -> Данные передаются в Users.swift -> Отображать данные, хранящиеся в Users.swift в ViewController.swift

Код в ViewController

import UIKit class ViewController: UIViewController { @IBOutlet weak var usernameLabel: UILabel! // var usernameLabelText = String() let dataObj = Users(Name: "", Email: "", Id: "", ProfilePicture: "", Username: "") var usernameLabelText: String? { return String(dataObj!.username) } override func viewDidLoad() { usernameLabel.text = "Welcome \(usernameLabelText)" print("This is the \(dataObj!.username)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

Код в Login.swift

 import Foundation import Alamofire import SwiftyJSON class Login { var userName:String! var passWord:String! init(userName : String, passWord : String) { let parameters = [ "username": userName, "password": passWord ] Alamofire.request(.POST, "http://anyapi.com", parameters: parameters) .responseJSON { response in print(response.request) print(response.response) print(response.data) print(response.result) if let result = response.result.value { print("Did receive JSON data: \(result)") let value = JSON(result) if let api_key = value["api_token"].string { print("The token is " + api_key) } else{ print("error parsing api token") } //pass data to Users class _ = Users.init(Name: value["name"].string, Email: value["email"].string, Id: value["id"].string, ProfilePicture: value["profile_picture"].string, Username: value["username"].string) } else { print("JSON data is nil.") } } } } 

Код в User.swift

 import Foundation import Alamofire import SwiftyJSON class Users { private var _name: String! private var _email: String! private var _userId: String! private var _profilePicture: String! private var _username: String! var particulars: [String] = [] var name: String { _name = particulars[0] return _name } var email: String { _email = particulars[1] return _email } var userId: String { _userId = particulars[2] return _userId } var profilePicture: String { _profilePicture = particulars[3] return _profilePicture } var username: String { _username = particulars[4] return _username } required init?(Name: String?, Email: String?, Id: String?, ProfilePicture: String?, Username: String?) { particulars += ["\(Name)"] particulars += ["\(Email)"] particulars += ["\(Id)"] particulars += ["\(ProfilePicture)"] particulars += ["\(Username)"] } } 

2 Solutions collect form web for “Правильный способ хранения и передачи данных между классами”

  1. Создайте переменную типа пользователя в контроллере просмотра.

     var usrData : Users? 
  2. Когда вы создаете экземпляр диспетчера представлений, назначьте переменную уже инициализированному классу пользователей.

     let view_controller_to_present = blahblah as! View Controller;<br> view_controller_to_present.usrData = DataFromRequest;<br> presentViewController(_ viewControllerToPresent: view_controller_to_present,animated flag: true, completion completion: nil); 
  3. Получите доступ к данным.

Есть много сказать …

О хранилище: ваши данные еще не сохранены. Вы можете использовать Core Data для их сохранения или NSUserDefault для более легкого решения (последнее не будет сохраняться после убийства приложения) или даже файлов.

О передаче данных из одного вида в другое: вы можете переопределить функцию prepareForSegue или использовать шаблон протокола и делегата.

  • Мгновенный просмотр контроллера просмотра из раскадровки против создания нового экземпляра
  • Наследование на контроллере просмотра Цель c
  • Swift 3 UIStatusBarStyle не работает для отдельных ViewControllers в UINavigationController
  • почему мой UIView subview не является рендерингом внутри родителя? (код прилагается)
  • iOS willRotateToInterfaceOrientation правильное использование
  • scrollsToTop не работает с защитой UIViewController
  • Почему приложение запускается каждый раз, когда я пытаюсь показать два контроллера дочерних представлений, которые являются GLKViewControllers?
  • Устранение отклоненияViewControllerAnimated: завершение: на iOS 8
  • Почему `viewWillAppear` устанавливает` анимированный` значение true даже при представлении `present (_, animated: false, _)`?
  • «ViewWillTransitionToSize:» не вызывается в iOS 9, когда контроллер представления представлен модально
  • Ошибка приложения при использовании PeoplePicker, но не в том же виде
  • Interesting Posts

    В чем преимущество использования поддержки armv7s в Valid Architecture?

    Передача NSString, возвращающая значение null в следующем ViewController

    google plus login перенаправляется на google.com в ios

    Когда в iOS происходит неявная анимация?

    Сбой при декодировании объекта после переименования и перезаписи в Swift

    Ошибка при запуске набора инструментов google для теста mac unit

    Почему приложение запускается каждый раз, когда я пытаюсь показать два контроллера дочерних представлений, которые являются GLKViewControllers?

    Live Stream с использованием файлов .m3u8 и .ts с iPhone в качестве сервера

    Мультиплеерная связь по Bluetooth?

    Индивидуальная выноска iOS Mapkit

    Как узнать все кнопки – это шоу? (editActionsForRowAtIndexPath)

    Как загрузить пакет изображений в scrollview с прокруткой horrizondal в iphone?

    Что такое код устройства (строка платформы) для iPhone 5 / 5c / 5s / iPod touch 5?

    Каково ожидаемое поведение входа в Facebook?

    NSLog на устройствах в iOS 10 / Xcode 8, кажется, усекается? Зачем?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.