return 如何从 Swift 中的 Cloud Code 进行布尔运算

How to return boolean from Cloud Code in Swift

我有一个云代码函数 returns 几个对象,其中一些是布尔值。我想根据返回对象的布尔值在我的 Swift 代码中做一些事情,如下所示。但是,我在实施中不断遇到多个错误。

云码

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
  • 中格式化您的代码

原来云代码返回的值是 NSDictionary。这就是我在 Swift.

中所做的
PFCloud.callFunctionInBackground("checkCharge", withParameters: ["charge": orderCharge]) { (success: AnyObject?, error: NSError?) -> Void in
     if error == nil{
        let objects2 = success as! NSDictionary
        let chargeCaptured = objects2.objectForKey("captured") as! Bool
        let chargeRefunded = objects2.objectForKey("refunded") as! Bool
        let chargePaid = objects2.objectForKey("paid") as! Bool
    }
}