2016-02-29 52 views
1

訪問類的實例,我在UserClass.swift像這樣定義一個用戶類:如何在斯威夫特

class User { 
    var id:Int 
    var name:String 
    var phone:String 
    var email:String 

    init(id:Int, name:String, phone:String, email:String){ 
     self.id = id 
     self.name = name 
     self.phone = phone 
     self.email = email 
    } 
} 

在我ProfileViewController我打電話叫getUserDataviewDidLoad的方法。

class ProfileViewController: UIViewController { 

    @IBOutlet weak var userNameLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     getUserData { myUser in 
      self.userNameLabel.text = myUser.name 
     } 
} 

getUserData坪我的API,然後實例化和實例User類的。

func getUserData(completionHandler:(User)->()) { 

    Alamofire.request(.GET, "apiEndPoint") 
     .responseJSON { response in 

     if let value: AnyObject = response.result.value { 

      let userData = JSON(value) 
      let userName = userData["name"].string! 
      let userId = userData["id"].int! 
      let userPhone = userData["phone"].string! 
      let userEmail = userData["email"].string! 

      let myUser = User(id:userId, name:userName, phone:userPhone, email:userEmail) 

      print("user: \(myUser.name)") 

      completionHandler(myUser) 

     } 
    } 
} 

然後我和一個回調傳遞實例的ProfileViewController,這樣我就可以更新標籤。這很好。

問題是,現在我想查看User實例myUser的另一個屬性,在回調之外的另一個地方。最後,我想獲得用戶的ID,但現在我只是想在所有訪問實例,所以我在更新與該用戶的姓名標籤再次尋找:

class MyActivitiesViewController: UIViewController { 

    @IBOutlet weak var myActTempLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
      self.myActTempLabel.text = myUser.name 
    } 
} 

這是給我的錯誤Use of unresolved identifier 'myUser'。如何訪問我已創建的用戶實例?

回答

1

你應該保持在一個單獨的用戶對象的引用爲了在任何地方訪問它。基本上,在這樣的情況下,你有一個叫單類說CurrentUser

class CurrentUser { 
    static var sharedInstance = CurrentUser() 
    var user:User? 
} 

然後在您的網絡通話或者也許你在哪裏,你知道在第一時間獲取用戶可以設置的第一個視圖控制器完成處理User實例添加到CurrentUser單例中。

CurrentUser.sharedInstance.user = myUser

之後,您可以在所有要獲得用戶的詳細信息,場所使用CurrentUser.sharedInstance.user

0

這很簡單。只需在您的類中創建用戶的參考和分配MYUSER它 喜歡:

class ProfileViewController: UIViewController { 
var user: User? 
@IBOutlet weak var userNameLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    getUserData { myUser in 
     self.user = myUser 
     self.userNameLabel.text = myUser.name 
    } 

}

0

您的實例MYUSER在你剛剛塊存在。您需要創建一個變量來存儲這些

class ProfileViewController: UIViewController { 
var user:User? 
@IBOutlet weak var userNameLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    getUserData { myUser in 
     self.userNameLabel.text = myUser.name 
     user = myUser 
    } 

}

現在你可以使用「用戶」屬性,你的外塊訪問