2016-05-09 8 views
3

私はUsersクラスとLoginクラスを別々のファイルに持っています。これらのクラスでは、データは初期化され、Loginクラスで最初に取得され、後で他のクラスで使用するためにUsersクラスに格納されます。 Usersクラスの変数を使用するには、クラス内の値をリセットする必要があります。どのようにして、常に初期化せずに変数を取得できますか?クラス間でデータを格納して渡す適切な方法

ViewController.swiftにUsers.swiftに格納されたデータを表示することができません> - >データがUsers.swiftに渡される -

データはLogin.swiftに収容されている:それは今は何

私は何を探しています:

データはLogin.swiftで受信される - >データがUsers.swiftに渡される - >

ViewController.swiftにUsers.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.") 
      } 


    } 

} 
} 

コード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)"] 
} 

} 

答えて

0
  1. View Controllerにユーザータイプ変数を作成します。

    var usrData : Users? 
    
  2. View Controllerをインスタンス化するときに、変数を既に初期化されたユーザークラスに割り当てます。

    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. データにアクセスします。

0

言いたいことがたくさんあります...ストレージについて

: あなたのデータがまだ保存されていません。コアデータを使用して永続化するか、NSUserDefaultを使用して軽量ソリューション(後者はアプリケーションの終了後にデータを保持しません)、またはファイルを使用できます。

1つのビューから別のビューへのデータの受け渡しについて prepareForSegue関数をオーバーライドしたり、プロトコルとデリゲートのパターンを使用したりできます。

関連する問題