【发布时间】:2021-06-13 04:27:17
【问题描述】:
我有一个从应用程序调用的 httpsCallable 云函数。从技术上讲,它运行良好,但正如您所见,代码非常嵌套,我觉得这可以更好地处理。我也收到了警告。
响应result?.data 是Any 类型,所以我不能直接在try decoder.decode(PaymentIntent.self, from: data) 中使用它,因为这需要Data 类型。为此我使用try? JSONSerialization.data(withJSONObject: result?.data)
知道如何将所有内容解码为PaymentIntent 模型吗?
我有一个从应用程序调用的 httpsCallable 云函数。从技术上讲,它运行良好,但正如您所见,代码非常嵌套,我觉得这可以更好地处理。我也收到了警告。
响应result?.data 是Any 类型,所以我不能直接在try decoder.decode(PaymentIntent.self, from: data) 中使用它,因为这需要Data 类型。为此,我使用try? JSONSerialization.data(withJSONObject: result?.data)
知道如何将所有内容解码为PaymentIntent 模型吗?
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
functions.httpsCallable("createPaymentIntent").call(data) { (result, error) in
if let error = error as NSError? {
completion(nil, error)
} else {
let data = try? JSONSerialization.data(withJSONObject: result?.data)
if let data = data {
do {
let paymentIntent = try decoder.decode(PaymentIntent.self, from: data) // Expression implicitly coerced from 'Any?' to 'Any'
completion(paymentIntent.clientSecret, nil)
} catch {
completion(nil, error);
}
}
// Update
if let data = result?.data as? NSDictionary {
print(data)
do {
// Cannot convert value of type 'NSDictionary' to expected argument type 'Data'
let paymentIntent = try decoder.decode(PaymentIntent.self, from: data)
completion(paymentIntent.clientSecret, nil)
} catch {
completion(nil, error);
}
}
}
}
【问题讨论】:
标签: ios swift firebase google-cloud-functions swift5