Swift2 斯威夫特·阿拉莫菲尔+;抓住承诺

Swift2 斯威夫特·阿拉莫菲尔+;抓住承诺,swift2,alamofire,promisekit,Swift2,Alamofire,Promisekit,伙计们,除了catch之外,下面的代码可以正常工作,xcode错误会在“.”后面出现预期的成员名。 这是向PromiseKit承诺的正确方式吗 欢迎大家提出建议!谢谢 @IBAction func loginButtonTapped(sender: AnyObject) { let email = userEmail.text! let password = userPassword.text! func onSuccess(success:Bo

伙计们,除了catch之外,下面的代码可以正常工作,xcode错误会在“.”后面出现
预期的成员名。

这是向PromiseKit承诺的正确方式吗

欢迎大家提出建议!谢谢

@IBAction func loginButtonTapped(sender: AnyObject) {
        let email = userEmail.text!
        let password = userPassword.text!

        func onSuccess(success:Bool, message:String, token: String) -> Promise<Void> {
            if success {
                NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn")
                NSUserDefaults.standardUserDefaults().synchronize()
                self.dismissViewControllerAnimated(true, completion: nil)
            } else {
                let myAlert = UIAlertController(title: "Alert", message: message, preferredStyle: UIAlertControllerStyle.Alert)
                let okAction = UIAlertAction(title: "Try Again", style: UIAlertActionStyle.Default, handler: nil)
                myAlert.addAction(okAction)
                self.presentViewController(myAlert, animated: true, completion: nil)
            }
            return Promise { resolve, reject in
                return resolve()
            }
        }

        func onFailure(error:NSError) -> Promise<Void> {
            return Promise { resolve, reject in
                return reject(error)
            }
        }

        Login(email, password: password).then(onSuccess).catch(onFailure)
    }


private func Login(email: String, password: String) -> Promise<(success:Bool, message:String, token: String)> {
    let parameters: [String: String] = [
        "username" : email,
        "password" : password
    ];
    let endpoint = "https://api.foo.bar/login"
    return Promise { resolve, reject in
        Alamofire.request(.POST, endpoint, parameters: parameters, encoding: .JSON)
            .validate()
            .responseJSON { (response) in
                guard response.result.error == nil else {
                    logger.debug(response)
                    let result:(success:Bool, message:String, token: String) = (false, "Login Failed", "")
                    return resolve(result)
                }

                if let value = response.result.value {
                    let apiResponseJSONBody = JSON(value)
                    let result:(success:Bool, message:String, token: String) = (true, "", token: apiResponseJSONBody["token"].string!)
                    return resolve(result)
                }
        }
    }
}
@iAction func loginButtonTapped(发件人:AnyObject){
让email=userEmail.text!
让password=userPassword.text!
func onSuccess(成功:Bool,消息:String,令牌:String)->Promise{
如果成功{
NSUserDefaults.standardUserDefaults()
NSUserDefaults.standardUserDefaults().synchronize()
self.dismissViewControllerAnimated(真,完成:无)
}否则{
让myAlert=UIAlertController(标题:“警报”,消息:消息,首选样式:UIAlertControllerStyle.Alert)
让okAction=UIAlertAction(标题:“重试”,样式:UIAlertActionStyle.Default,处理程序:nil)
myAlert.addAction(okAction)
self.presentViewController(myAlert,动画:true,完成:nil)
}
返回承诺{在中解决、拒绝
返回解析()
}
}
函数失败(错误:NSError)->Promise{
返回承诺{在中解决、拒绝
返回拒绝(错误)
}
}
登录(电子邮件,密码:password)。然后(onSuccess)。捕获(onFailure)
}
私人func登录(电子邮件:String,密码:String)->Promise{
let参数:[String:String]=[
“用户名”:电子邮件,
“密码”:密码
];
让端点=”https://api.foo.bar/login"
返回承诺{在中解决、拒绝
请求(.POST,端点,参数:参数,编码:.JSON)
.validate()
.responseJSON{(response)in
guard response.result.error==nil else{
logger.debug(响应)
let result:(成功:Bool,消息:String,令牌:String)=(false,“登录失败”,“登录失败”)
返回解析(结果)
}
如果let value=response.result.value{
让apiResponseJSONBody=JSON(值)
let result:(success:Bool,message:String,token:String)=(true,“,token:apiResponseJSONBody[“token”]。String!)
返回解析(结果)
}
}
}
}

值得注意的一件有趣的事情是,我似乎不必使用
dispatch\u async
,对吗?调用Login(电子邮件,密码:password)。然后(onSuccess)。catch(onFailure)方法是否真的不需要调用dispatch\u async?