如何在 Swift 中访问 class 的实例
How do I access an instance of a class in Swift
我在 UserClass.swift
中定义了一个用户 class,如下所示:
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
上调用了一个名为 getUserData
的方法。
class ProfileViewController: UIViewController {
@IBOutlet weak var userNameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
getUserData { myUser in
self.userNameLabel.text = myUser.name
}
}
getUserData
ping 我的 API 然后实例化 User
class.
的实例
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'
的错误。如何访问我已经创建的用户实例?
很简单。只需在 class 中创建一个 User 引用并将 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
}
}
您的实例 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
}
}
现在您可以使用 "user" 属性 访问您的街区外
您应该在单例中保留对 User 对象的引用,以便在任何地方访问它。基本上在这种情况下,您有一个名为 say CurrentUser
的单例 class
class CurrentUser {
static var sharedInstance = CurrentUser()
var user:User?
}
然后在您的网络调用中或者可能在您知道第一次获得用户的第一个视图控制器的完成处理程序中,您可以将 User 实例设置为 CurrentUser 单例。
CurrentUser.sharedInstance.user = myUser
稍后您可以在所有想要获取用户详细信息的地方使用CurrentUser.sharedInstance.user
。
我在 UserClass.swift
中定义了一个用户 class,如下所示:
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
上调用了一个名为 getUserData
的方法。
class ProfileViewController: UIViewController {
@IBOutlet weak var userNameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
getUserData { myUser in
self.userNameLabel.text = myUser.name
}
}
getUserData
ping 我的 API 然后实例化 User
class.
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'
的错误。如何访问我已经创建的用户实例?
很简单。只需在 class 中创建一个 User 引用并将 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
}
}
您的实例 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
}
}
现在您可以使用 "user" 属性 访问您的街区外
您应该在单例中保留对 User 对象的引用,以便在任何地方访问它。基本上在这种情况下,您有一个名为 say CurrentUser
class CurrentUser {
static var sharedInstance = CurrentUser()
var user:User?
}
然后在您的网络调用中或者可能在您知道第一次获得用户的第一个视图控制器的完成处理程序中,您可以将 User 实例设置为 CurrentUser 单例。
CurrentUser.sharedInstance.user = myUser
稍后您可以在所有想要获取用户详细信息的地方使用CurrentUser.sharedInstance.user
。