我在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
}
}
的错误。如何访问我已创建的用户实例?
答案 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”属性访问块外