ios - 如何在 Swift 中访问类的实例

标签 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 上调用了一个名为 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 类的实例。

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'。如何访问我已经创建的用户实例?

最佳答案

您应该在单例中保留对 User 对象的引用,以便在任何地方访问它。基本上在这种情况下,您有一个名为 say CurrentUser

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

然后在您的网络调用中或者可能在您知道第一次获得用户的第一个 View Controller 的完成处理程序中,您可以将 User 实例设置为 CurrentUser 单例。

CurrentUser.sharedInstance.user = myUser

稍后您可以在所有想要获取用户详细信息的地方使用CurrentUser.sharedInstance.user

关于ios - 如何在 Swift 中访问类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35693019/

相关文章:

swift - 捏合手势不适用于 SKCameraNode

ios - iTunes Connect 无法编辑描述

ios/objective-C : error: linker command failed with exit code 1 (use -v to see invocation)

swift - 在 ios swift 3 中更改应用程序的隐私设置并返回相同的应用程序状态

ios - 使用图像快速设置按钮约束

c# - 如何从单独类中的代码更新 UI 进度条或后台工作程序?

php - 单独的类方法声明和定义?

java - 使用 Java 从类数组创建类的新实例

iOS 是否有可能观察者更改导航栏高度?

ios - NSStackView subview 不调整子堆栈 View 的大小