iOS Swift:在视图和完成处理程序之间传递数据

时间:2016-07-07 12:18:28

标签: ios swift

我有两个viewControllers:LoginViewController和NextViewController。现在,当app运行时,LoginViewController运行一个完成处理程序,负责处理HTTP请求的身份验证,并在完成后,它调用另一个获取必要用户数据的闭包。

我不知道如何将我从回调函数返回的数据传递到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 个答案:

答案 0 :(得分:1)

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