ios - 如何在 Swift 中从 Cloud Code 返回 bool 值

标签 ios swift parse-platform stripe-payments parse-cloud-code

我有一个 Cloud Code 函数,它返回多个对象,其中一些是 bool 值。我想在我的 Swift 代码中根据返回对象的 bool 值做一些事情,如下所示。但是,我在实现中不断遇到多个错误。

云代码

Parse.Cloud.define("checkCharge", function(request, response){
    stripe.charges.retrieve(request.params.charge, function(err, charge) {
        if(err){
                console.log(err);
                response.error(err);
        }else{
                console.log("Successfully checked the charge");
                response.success(charge);
        }
}); 
});

Swift 代码

PFCloud.callFunctionInBackground("checkCharge", withParameters: ["charge": orderCharge]) { (success: AnyObject?, error: NSError?) -> Void in
//                            if let responseJSON: [String: Bool] = success as? [String: Bool] {
                            if error == nil{
//                                let responseString = response as? String
//                                let chargeCaptured: Bool = success["captured"]
                                let objects = success as! NSArray
                                for object in objects {
                                let chargeCaptured = object["captured"] as! Bool
                                let chargeRefunded: Bool = success["refunded"]
                                let chargePaid: Bool = success["paid"]
                                if chargeCaptured == true || chargeRefunded == true || chargePaid == true{
                                    print("charge already processed charge")
                                    object.deleteInBackground()
                                }else{
                                    self.storyboard
}

每当我尝试设置常量时,都会收到诸如下标使用不明确和类型 AnyObject 没有下标成员之类的错误。我还收到错误无法将 Bool 类型转换为 Bool。

最佳答案

问题:

  • 在转换为 NSArray 后,您尝试像字典一样使用它。

代码:

看看这是否可以解决您的问题:

PFCloud.callFunctionInBackground("checkCharge", withParameters: ["charge": orderCharge]) { data, error in

    //If there is an error, code will not proceed, it will exit
    guard error == nil else {
        print("error = \(error!)")
        return
    }

    //If data is not a dictionary of the type [String : Any] it will exit
    guard let objects = data as? [String : Any] else {
        print("data is not of the type [String : Any]")
        print("actual data type of data = \(type(of: data))")
        return
    }

    if let chargeCaptured   = objects["captured"] as? Bool,
        let chargeRefunded  = objects["refunded"] as? Bool,
        let chargePaid      = objects["paid"] as? Bool,
        chargeCaptured      == true || chargeRefunded == true || chargePaid == true {

        print("charge already processed charge")
        object.deleteInBackground()
    }
    else {

        print("Else condition")
    }
}

建议:

  • 请尽可能使用 Swift 原生类型
  • 使用 guardif let 有条件地解开可选值
  • 如果您学习 Swift 基础知识将会很有帮助。
  • 使用 Control + I 快捷键在 Xcode 中格式化代码

关于ios - 如何在 Swift 中从 Cloud Code 返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233438/

相关文章:

ios - 蓝牙连接至 iPhone 的设备

ios - 在 Swift-iOS 中如何捕获 AWS Cognito 中的用户身份验证错误?

ios - RxSwift 绑定(bind)在文本字段上,在推送另一个 View 后发送下一个

ios - 检查 bool 是否为真 x 秒 - Swift

parse-platform - 是否可以要求 Mandrill 试运行电子邮件发送? (解析云代码)

ios - 核心数据 : How to update value of type NSSet

iOS 上的 Android 下载管理器替代品

java - 如何在 Parse 中从数组中删除字符串

iphone - 如何计算减速结束后 ScrollView 将停止的 contentOffset?

git - 无法运行解析仪表板