Swift Alamofire - 使用NULL值参数进行POST请求

3
以下是我在Alamofire中的POST请求,其中我的参数值是可选的。我希望允许用户调用此API来设置所需的参数,即使它为空(相当于重置为空默认值)。
下面是我的请求和参数“status”的示例,它是一个可选变量,预期接受null值:
let URL_UPDATE_STATUS = URL_HOME + "/v1/updateStatus/" + dataId
let parameters: [String : Any] = ["status": status as Any]
                
Alamofire.request(URL_UPDATE_STATUS, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: self.headers).responseString { response in
    switch response.result {
    case .success:
        print("[Log] Update Status Success")
    case .failure(let error):
        print("[ERROR] UpdateStatus - \(error)")
                
        APIErrorHandler(response: response, error: error)
    }
}

然而,我尝试了几次,但总是返回一些错误。我尝试让其变成可选项,但发现它没有插值(即成为"Optional(\"SOME_STATUS\")")。当我尝试强制解包字符串时,这些空值将导致致命错误。此外,我还尝试了将null作为请求参数的值传递的方法,但无论如何都不起作用。

我不明白该如何修复它,有人可以帮忙吗?非常感谢!


如果可选值为nil,则强制将nil值转换为Any类型,这会导致程序崩溃。 let parameters: [String : Any] = ["status": status as Any] - Same7Farouk
感谢 @Same7Farouk!我试图强制转换“nil”,因为它会使参数值看起来像“Optional(\“SOME_STATUS\”)”... - markandshare
3个回答

1
你可以创建参数字典然后给它赋值。在这种情况下,键可能有一个存在或不存在的值。
var parameters: [String : Any] = [:]
parameters["status"] = status

谢谢你,zombie!但是我打算将参数设置为“nil”值(即像POST请求的查询字符串中的“status=NULL”一样),以某种方式重置状态标志。 - markandshare
1
@markandshare nil 表示参数键不存在,与不发送它相同。或者你是指 NSNull() - zombie
我之前尝试传递NSNull(),但状态会被设置为字符串“<null>”... 我是使用了错误的编码方法吗?结果看起来是什么样子的? - markandshare
@zombie 谢谢,我尝试将 nil 作为请求正文的参数传递,并使用 NSNull() 来解决问题。 - Anke

0

谢谢Ctibor Šebák!我也尝试传递“nil”,但结果是参数值变成了“Optional(\”SOME_STATUS\“)”... - markandshare

0

不要传递空参数,你可以检查它是否有值再传递

检查一下这段代码

let URL_UPDATE_STATUS = URL_HOME + "/v1/updateStatus/" + dataId
var parameters: [String : Any]? = nil
if let status = status {
    parameters  = ["status": status]
}
Alamofire.request(URL_UPDATE_STATUS, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers: self.headers).responseString { response in
        switch response.result {
        case .success:
            print("[Log] Update Status Success")
        case .failure(let error):
            print("[ERROR] UpdateStatus - \(error)")
                
        APIErrorHandler(response: response, error: error)
    }
}

谢谢Same7Farouk!我没有设置参数“nil”,但我需要将参数设置为“nil”值(例如,像POST请求的查询字符串“status=NULL”一样),以某种方式重置状态标志。 - markandshare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接