Swift Alamofire SwiftyJSON异步/同步类方法
发布时间:2020-12-14 05:38:06 所属栏目:百科 来源:网络整理
导读:所以我目前有以下内容: class ViewController: UIViewController {class Identity{ let baseUrl = "superSecretURL" var _username: String = "" var _password: String = "" var _apiKey: String = "" init(){ } init(username: String,apiKey: String){ _
所以我目前有以下内容:
class ViewController: UIViewController { class Identity{ let baseUrl = "superSecretURL" var _username: String = "" var _password: String = "" var _apiKey: String = "" init(){ } init(username: String,apiKey: String){ _username = username _apiKey = apiKey } init(username: String,password: String){ _username = username _password = password } func loginPassword() -> String{ var loginJSON = ["auth": ["passwordCredentials": ["username": _username,"password": _password]]]; var returnJSON: String request(.POST,baseUrl,parameters: loginJSON,encoding: .JSON) .responseJSON { (request,response,data,error) in if let anError = error { // got an error in getting the data,need to handle it println("error calling POST on /posts") println(error) } else if let data: AnyObject = data { // handle the results as JSON,without a bunch of nested if loops let post = JSON(data) // to make sure it posted,print the results println("JSON Returned") } } } } var i = Identity(username: "secretName",password: "complicatedPassword") override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. println("Before Call") println("After Call") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 基本上我希望能够调用println(“Before Call”)然后从loginPassword()方法接收响应,然后println(“After Call”).这是我相信同步,但我无法找到一种方法让它工作,整个线程的事情让我感到困惑. 我基本上希望能够说: if i.loginPassword(){ // do some login stuff }else{ // do some error stuff } 任何帮助或指针赞赏.
您需要在loginPassword()函数中设置要调用的回调函数.
这可能是实现它的一种方式: func loginPassword(callback: ((isOk: Bool)->Void)?) -> String{ var loginJSON = ["auth": ["passwordCredentials": ["username": _username,"password": _password]]]; var returnJSON: String request(.POST,encoding: .JSON) .responseJSON { (request,error) in if let anError = error{ // got an error in getting the data,need to handle it println("error calling POST on /posts") println(error) callback?(isOk: false) } else if let data: AnyObject = data{ // handle the results as JSON,without a bunch of nested if loops let post = JSON(data) // to make sure it posted,print the results println("JSON Returned") callback?(isOk: true) } } } 然后… override func viewDidLoad() { super.viewDidLoad() var identity = Identity(username: "John Apleseed",apiKey: "213123123") identity.loginPassword { (isOK) -> Void in if (isOK) { //do good stuff here }else{ // do error handling here } } } UPDATE 此外,您的调用函数可能如下所示: override func viewDidLoad() { super.viewDidLoad() var identity = Identity(username: "John Apleseed",apiKey: "213123123") identity.loginPassword(handlePasswordRequest) } 并且您可以添加尽可能多的回调处理程序,而无需乱搞一堆嵌套的闭包…… private func handlePasswordRequest(isOK: Bool){ if (isOK) { //do good stuff here }else{ // do error handling here } } 更新2 如果您需要在调用层次结构中深入调用回调,则需要将回调作为每个先前闭包的参数传递. 更新3 我会尝试一下RxAlamofire和RxSwift (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |