如何在斯威夫特
问题描述:
访问类的实例,我在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
我打电话叫getUserData
上viewDidLoad
的方法。
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'
。如何访问我已创建的用户实例?
答
你应该保持在一个单独的用户对象的引用为了在任何地方访问它。基本上,在这样的情况下,你有一个叫单类说CurrentUser
class CurrentUser {
static var sharedInstance = CurrentUser()
var user:User?
}
然后在您的网络通话或者也许你在哪里,你知道在第一时间获取用户可以设置的第一个视图控制器完成处理User实例添加到CurrentUser单例中。
CurrentUser.sharedInstance.user = myUser
之后,您可以在所有要获得用户的详细信息,场所使用CurrentUser.sharedInstance.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
}
}
现在你可以使用“用户”属性,你的外块访问