2016-05-09 12 views
3

Ich habe eine Users-Klasse und eine Login-Klasse (in separaten Dateien), in denen Daten initialisiert und zuerst in der Login-Klasse abgerufen und dann in der Klasse Users für zukünftige Verwendung in anderen Klassen gespeichert werden. Um die Variablen aus der Users-Klasse zu verwenden, muss ich sie ständig initialisieren, wodurch die Werte in der Klasse zurückgesetzt werden. Wie kann ich Variablen erhalten, ohne ständig zu initialisieren?Ordnungsgemäße Methode zum Speichern und Weiterleiten von Daten zwischen Klassen

Was es jetzt ist:

Daten werden in Login.swift empfangen -> Daten zu Users.swift geben wird -> kann nicht in Users.swift

in ViewController.swift gespeicherten Daten anzuzeigen

Was ich suche:

Daten werden in Login.swift empfangen -> Daten an Users.swift weitergegeben -> gespeicherten Anzeigedaten in Users.swift in ViewController.swift

-Code in 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. 
} 


} 

-Code in 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.") 
      } 


    } 

} 
} 

-Code in Users.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)"] 
} 

} 

Antwort

0
  1. Erstellen Sie eine Benutzertypvariable in View Controller.

    var usrData : Users? 
    
  2. Wenn Sie den View-Controller instanziiert, weisen Sie die Variable auf die bereits Benutzerklasse initialisiert.

    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. Zugriff auf die Daten.

0

Es gibt eine Menge zu sagen ...

über Lagerung: Ihre Daten noch nicht gespeichert wurden. Sie können Core-Daten verwenden, um sie persistent zu halten, oder NSUserDefault für eine leichtere Lösung (die letztere wird keine Daten nach dem Löschen von Apps beibehalten) oder sogar Dateien.

Informationen zum Übergeben von Daten von einer Ansicht an eine andere: Sie können prepareForSegue-Funktion überschreiben oder Protokoll- und Delegatenmuster verwenden.

Verwandte Themen