首页 > 解决方案 > Swift 与 WHMCS API 交互

问题描述

我正在开发一个 Swift 应用程序来与我当前在生产服务器中运行的 WHMCS API 软件进行交互。但是在尝试捕获并执行 json 解码时,我遇到了这个调试错误消息:

keyNotFound(CodingKeys(stringValue: "userid", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"userid\", intValue: nil) (\"userid\").", underlyingError: nil))

涉及的代码是:

import Foundation

class NetworkManager {
    
    @Published var posts = [Results]()
    var privatedata = Credentials()
    
    func fetchData(email: String, password2:String, action: String) {
        switch action {
        case "ValidateLogin":
            if let url = URL(string: "https://XXXXXX.server/includes/api.php?action=\(action)?email=\(email)&password2=\(password2)&username=\(privatedata.api_id)&password=\(privatedata.api_secret)&responsetype=json") {
                let session = URLSession(configuration: .default)
                let task = session.dataTask(with: url) { (data, response, error) in
                    if error == nil {
                        let decoder = JSONDecoder()
                        if let safeData = data {
                            do {
                                let results = try decoder.decode(PostData.self, from: safeData)
                                DispatchQueue.main.async {
//                                    posts.self = results.self
                                }
                                print(results.result)
                            } catch {
                                print(error)
                            }
                        }
                    } else { print("error: \(String(describing: error))")}
                }
                task.resume()
            }
        default:
            print("Error in switch statement")
        }
    }
}

关于如何进行此运行的任何想法?提前致谢

标签: jsonswiftcodable

解决方案


您很可能userid在模型中定义了这样的属性PostData

struct PostData: Codable {
    var userid: Int
}

显然,此属性在您的响应 JSON 中不存在或具有null价值。也许您应该将此属性定义为可选的,如下所示:

struct PostData: Codable {
    var userid: Int?
}

推荐阅读