如何将iOS端Parse云函数的返回结果转换为自定义Struct结构
实现方案
直接在云函数回调中完成格式转换即可,完整实现代码如下:
PFCloud.callFunction(inBackground: "getMaterials", withParameters: ["skip":0, "take": 20]) { (response, error) in // 处理请求错误 if let error = error { print("云函数调用失败: \(error.localizedDescription)") return } // 将返回结果转换为字典格式 guard let resultDict = response as? [String: Any] else { print("返回格式不符合预期") return } // 提取字段并生成目标结构体 let materials = resultDict["materials"] as? [Materiale] ?? [] let result = MaterialeResults( materials: materials, message: resultDict["message"] as? String, success: resultDict["success"] as? Bool, total: resultDict["total"] as? Int ) // 后续直接使用result变量即可 }
如果需要复用转换逻辑,可以给MaterialeResults扩展一个字典初始化方法:
extension MaterialeResults { init?(rawDict: [String: Any]) { // 必填字段校验,校验失败返回nil guard let materials = rawDict["materials"] as? [Materiale], let success = rawDict["success"] as? Bool, let total = rawDict["total"] as? Int else { return nil } self.materials = materials self.success = success self.total = total self.message = rawDict["message"] as? String } }
扩展后回调中的转换逻辑可以简化为:
guard let resultDict = response as? [String: Any], let result = MaterialeResults(rawDict: resultDict) else { // 格式错误处理逻辑 return }
注意事项
- 请确保你已经在App启动生命周期(比如
application:didFinishLaunchingWithOptions:方法中)调用了Materiale.registerSubclass()完成子类注册,否则PFObject类型转换会失败 - 你的
Materiale子类的parseClassName必须和云端Materials类的名称完全一致,否则也会出现转换失败的问题
内容的提问来源于stack exchange,提问作者Samuele Coppedè
相关产品推荐
相关产品推荐

