在向服务器发布请求时,我们如何在字典 [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

当别人在向我们销售SaaS平台时,我们该如何选择?

错误-TypeError:仅在向 Angular 5 应用程序内的 api 服务器发出 GET 请求后,在 Safari 上输入错误

我们如何在构建 R 包时设置常量变量?