在向服务器发布请求时,我们如何在字典 [String:String] 的参数列表中传递默认空值?斯威夫特3
Posted
技术标签:
【中文标题】在向服务器发布请求时,我们如何在字典 [String:String] 的参数列表中传递默认空值?斯威夫特3【英文标题】:How we can pass default null value in parameter list of dictionary [String:String] while posting a request to server ? Swift3 【发布时间】:2018-01-05 10:04:42 【问题描述】:在某些情况下,我必须将空值作为默认值或参数值发布到服务器。我尝试了很多方法,但没有成功。我正在使用 Alamofire 发布请求。请帮助。
方法一
var empty : String = ""
let parameters = ["User-Id":userId,"search_cat": formattedArray ?? empty,"date1":ab ?? empty,"date2" : bc ?? empty,"docname" : empty
] as! [String : String]
方法二
let parameters = ["User-Id":userId,"search_cat": formattedArray ?? "","date1":ab ?? "","date2" : bc ?? "","docname" : ""
] as! [String : String]
方法3
var nullvalue : String = ""
if formattedArray == nil
formattedArray = ""
print(formattedArray)
if ab == nil
ab = ""
print(ab)
if bc == nil
bc = ""
print(bc)
if nullvalue == nil
nullvalue = ""
parameters = ["User-Id":userId,"search_cat": formattedArray,"date1":ab ,"date2" : bc ,"docname" : nullvalue ]
as! [String : String]
方法 - 4 根据答案,我将参数列表字典更改为 [String:AnyObject] 但仍然无法正常工作。并给我错误。
var ab:String?
var bc : String?
var formattedArray: String?
parameters = ["User-Id":userId ,"search_cat": formattedArray ?? NSNull() ,
"date1":ab ?? NSNull() ,"date2" : bc ?? NSNull(),
"docname" : NSNull()] as! [String : AnyObject]
Method-4 在尝试设置 formattedArray 时给我 错误?? NSNull() : 无法将“NSNull”类型的值转换为预期的参数类型“字符串” 其余参数工作正常。请帮助。
【问题讨论】:
【参考方案1】:更新:这是你想要的吗?
class RequestParameter : NSObject
var formattedArray : String!
var date1 : String!
var date2 : String!
var docName : String!
var userId : String! // or whatever if hardCoded
func param() -> NSDictionary
var param : [String : String] = [:]
param["User-Id"] = userId
param["search_cat"] = formattedArray
param["date1"] = date1
param["date2"] = date2
param["docname"] = docName
return param as! NSDictionary
您可以在需要时调用这些参数。像
var reqParam = RequestParameter()
reqParam.param()
我真的不知道您的请求参数类型。例如。它应该看起来像 date1 = nil 还是其他东西。 这就是我能回答你的全部了。如果错了,也许有人会更好。
祝你好运!!
【讨论】:
我的参数列表的类型是 [String:String] 而不是 [String:Any] 因为如果它是 [String:Any] 类型,那么将设置 NSNull()。 告诉我一件事是“search_cat”键始终为空或值稍后更改为字符串(在请求中) 您是否使用 Postman 来检查请求和响应。如果是,那么您能否在 Postman 中发布请求的图像。 不总是 null 取决于选择如果不会从 UI 中选择任何 date1 那么它应该被认为是 null 否则无论我选择什么日期。 嗨@deltami....如果您尝试parameters = [String : Any]()
或尝试(formattedArray as? AnyObject) ?? NSNull()
会怎样【参考方案2】:
实际上我几天前遇到了同样的问题,并使用 NSNull() 解决了它。
在转换我的类时,我想发送 videoUrl 属性,无论它是否包含值,以便后端可以在数据库中更新它。
dict["videoUrl"] = videoUrl ?? NSNull()
这将使用属性 videoUrl 的值设置键“videoUrl”,或者如果为 nil,则设置 NSNull() 的实例。
Express.js 然后将其读取为未定义并将空值插入数据库。
编辑:我在下面看到了你的一个 cmets。当使用类型为 [String:String] 的字典时,您将永远无法传递 nil 值。
【讨论】:
感谢您的回复。我试图通过这个:parameters = ["User-Id":userId,"search_cat":formattedArray ?? NSNull() "date1":ab ?? NSNull() "date2" : bc ?? NSNull() ,"docname" : NSNull()] 一样! [String : AnyObject] 但它给了我错误:无法转换类型“字符串!”的值到预期的参数类型'_?' 嘿,请检查我更新的问题,如果可以的话,请帮助我。:( @deltami 请改用 [String:Any]。并且不要使用as! [String:Any]
,那是强制转换。声明类型时,您可以在变量名之后执行此操作,例如 let somethingSomething: [String: Any] = [.....]
。以上是关于在向服务器发布请求时,我们如何在字典 [String:String] 的参数列表中传递默认空值?斯威夫特3的主要内容,如果未能解决你的问题,请参考以下文章
在向外部服务器发送 ajax 调用时,Access-Control-Allow-Headers 在预检响应中不允许请求标头字段授权 [重复]
jQuery xhr.status 在向 localhost 发送请求时返回 0
错误-TypeError:仅在向 Angular 5 应用程序内的 api 服务器发出 GET 请求后,在 Safari 上输入错误