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

У меня есть класс класса 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 или использовать шаблон протокола и делегата.

  • Методы вращения UIViewController
  • Отключите и представите контроллер модального представления с одной анимацией
  • Как удалить вид из навигационного контроллера
  • Определите правильный размер в loadView
  • UICollectionView с UIViewController в качестве источника данных
  • Глядя на понимание жизненного цикла iOS UIViewController
  • UINavigationController показывает черный экран после нажатия вида
  • UIAccessibilityContainer в контроллерах дочерних элементов?
  • Почему UIViewController является подклассом UIResponder?
  • Проблемы с вращением UIActivityViewController
  • полезно ли использовать экран ADD и EDIT для использования того же UIViewController?
  • Interesting Posts

    Как построить библиотеку, написанную на C ++, и использовать ее в iOS

    Как выполнить отмену операции в iOS для хранения UIGraphicsContext?

    iOS: didDiscoverPeripheral не вызывается в фоновом режиме

    Перезагрузка AVMutableComposition

    быстрые множественные условия, если оператор с операцией &&

    Xcode 6 Beta – Ошибка Apple Mach-O Linker

    Объявить свойство @NSManaged, доступное только для чтения, в Swift для PFRelation для Parse

    Как проверить, выбран ли пользовательский интерфейс UISegmentedControl или нет?

    Проблема с размещением индикатора сетевой активности

    Когда вызывается layoutSubviews?

    Проблема с дизайном. Какую технологию я должен использовать для отправки текста другому пользователю в моем приложении?

    Как настроить аналитику на React Native для iOS

    Преобразовать записанный номер в число

    Перезапуск подключения к AVPlayer

    Как отключить интернет-соединение, bluetooth и WIFI программно?

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