Swift 与 WHMCS 互动 API

Swift interacting with 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")
        }
    }
}

知道如何制作这个 运行 吗?提前致谢

很可能您在 PostData 模型中定义了一个 userid 属性:

struct PostData: Codable {
    var userid: Int
}

显然此 属性 不存在于您的回复 JSON 中或具有 null 值。 也许你应该将这个 属性 定义为一个可选的,如下所示:

struct PostData: Codable {
    var userid: Int?
}