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 本机类型
- 使用
guard
、if 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
}
}
我有一个云代码函数 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 本机类型
- 使用
guard
、if 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
}
}