2016-07-07 45 views
-2

我有两个viewControllers:LoginViewController和NextViewController。现在,当应用程序运行时,LoginViewController运行一个完成处理程序,它负责使用HTTP请求进行身份验证,并在完成之后调用另一个可获取必要用户数据的闭包。iOS Swift:在视图和完成处理程序之间传递数据

我不知道如何将回调函数中返回的数据传递给NextViewController以显示它,因为我无法知道数据何时可用,因为它在后台运行HTTP请求。

那么我应该如何提供数据时,它变得可用?

我知道我可以调用第二个回调方法来获取nextViewController中的用户信息,但这会让应用程序变慢。

这里的示例代码:

class Methods: NSObject { 

    //Singleton 
    class func sharedInstance() -> Methods { 
     struct Singleton { 
      static var sharedInstance = Methods() 
     } 
     return Singleton.sharedInstance 
    } 


    private func GETMethod(callBackMethod: (Success: Bool) -> Void) { 
     //Do the authentication 
    } 

    private func retriveUserData(callBackMethod: (data: String, Success: Bool) -> Void) { 
     //Gets the data and passes processed data back in a callBackMethod 
    } 

    func doAuthentication(callBackMethod: (Success: Bool) -> Void){ 
     GETMethod { (Success) in 

      if Success { 
       self.retriveUserData({ (data, Success) in 


        data // <- HOW DO I GET THIS INTO LOGIN VIEW CONTROLLER? 


        callBackMethod(Success: true) 
       }) 
      } 
     } 
    } 
} 


class LoginViewController: UIViewController { 

    func loginButtonPressed(){ 
     Methods.sharedInstance().doAuthentication { (Success) in 

     } 
    } 

} 

class NextViewController: UIViewController { 

    //Present data when it becomes available 
} 

回答

1

考虑使用MVC模式,尤其是 “模型” 的一部分。创建一个对象,用作应用程序的共享数据模型。当你有新的数据时更新它。根据更新与控制器加载的时间安排,它可以在数据更改时发送通知,或者提供感兴趣的对象(控制器)可以查询以查明当前状态的API。

相关问题