如何在斯威夫特

问题描述:

访问类的实例,我在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我打电话叫getUserDataviewDidLoad的方法。

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 
    } 

}

现在你可以使用“用户”属性,你的外块访问