iOS中RaveSDK交易成功后响应为空且遇类型转换错误求助
问题解决:交易响应为空 + Swift类型转换错误
错误原因分析
- 类型转换错误:
responseData是可选类型的Swift字典[String:Any]?,无法直接强制转换为NSDictionary,可选值必须先解包才能进行类型转换或操作。 - 响应为空未处理:原代码没有判断
responseData是否为nil或空字典,直接强制转换会引发崩溃或逻辑错误。
修复后的代码
func transactionSuccessful(flwRef: String?, responseData: [String : Any]?) { // 先处理响应为空的情况 guard let dataDic = responseData, !dataDic.isEmpty else { // 响应为空时的处理逻辑,比如提示用户交易状态异常 self.customerVerified(flutterWaveToken: "") return } // 安全获取交易状态并判断 if let status = dataDic["status"] as? String, status == "success" { // 从响应中提取正确的flutterWaveToken(示例,根据实际接口返回字段调整) let token = dataDic["flutterWaveToken"] as? String ?? "" self.customerVerified(flutterWaveToken: token) } else { self.customerVerified(flutterWaveToken: "") } }
关键优化点
- 使用
guard let安全解包responseData,同时判断字典是否为空,避免空值引发的崩溃。 - 直接使用Swift原生字典的下标取值,配合
as? String进行类型安全转换,替代NSDictionary的get方法,更符合Swift语法规范。 - 增加了从响应中提取真实token的逻辑(需根据实际接口返回字段调整),原代码无论成功失败都传空字符串不符合业务逻辑。
内容的提问来源于stack exchange,提问作者Adeola Segun
相关产品推荐
相关产品推荐

