如何在Swift

时间:2016-02-29 06:13:04

标签: ios swift class instance

我在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中,我在名为viewDidLoad的{​​{1}}上调用方法。

getUserData

class ProfileViewController: UIViewController { @IBOutlet weak var userNameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() getUserData { myUser in self.userNameLabel.text = myUser.name } } ping我的API,然后实例化getUserData类的实例。

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的不同属性。最终我想获得用户的ID,但是现在我只是想尝试访问该实例,所以我再次关注用用户名更新标签:

myUser

这给了我class MyActivitiesViewController: UIViewController { @IBOutlet weak var myActTempLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() self.myActTempLabel.text = myUser.name } } 的错误。如何访问我已创建的用户实例?

3 个答案:

答案 0 :(得分:2)

您应该在单例中保留对User对象的引用,以便在每个位置访问它。基本上在这种情况下你有一个叫做CurrentUser

的单例类
class CurrentUser {
  static var sharedInstance = CurrentUser()
  var user:User?
}

然后在您的网络调用中或者在第一个视图控制器的完成处理程序中,您知道第一次获取用户的位置,您可以将User实例设置为CurrentUser单例。

CurrentUser.sharedInstance.user = myUser

稍后,您可以在要获取用户详细信息的所有位置使用CurrentUser.sharedInstance.user

答案 1 :(得分:0)

这很简单。只需在您的类中创建一个用户参考,并为其分配myUser 像:

NA

}

答案 2 :(得分:0)

你的实例myUser就在你的块中。您需要创建一个变量来存储此

{{1}}

}

现在您可以使用“user”属性访问块外