如何解开字典可选值?

时间:2017-07-05 19:32:49

标签: dictionary swift3

具有可选值

的字典键的

typealias

typealias JSON = [String:Any?]

这是我的字典

    var createAfterStr: String? = nil
    var createBeforeStr: String? = nil

    if let createdAfter = statesByScope.createdAfter, let afterStr = toString(date: createdAfter) {
        createAfterStr = afterStr
    }
    if let createdBefore = statesByScope.createdBefore, let beforeStr = toString(date: createdBefore) {
        createBeforeStr = beforeStr
    }

 let params:  JSON  = [
            "scope_id": statesByScope.scopeId,
            "createdAfter" : createAfterStr ?? nil,
            "createdBefore" : createBeforeStr ?? nil,
            "limit" : "4"]

当我发送它作为参数curl请求时。我似乎是网址:

 var request = URLRequest(baseUrl: baseUrl, path: path, method: method, params: params)
     request.setValue(token, forHTTPHeaderField: "Authorization")
 var urlrequst : URLRequest?
        do{
            urlrequst =  try  Alamofire.JSONEncoding.default.encode(request, with: params)    
        }catch let error {
           completion(nil, ServiceError.custom(String(describing: error)))
        }
          print(urlrequst)
  

https://www.demo.life/post?limit=Optional(%224%22)&createdBefore=nil&scope_id=Optional(%22a409f4c8-d62b-4e03-ae62-4aa17d8c74fa%22)&createdAfter=nil

它与Optional真正有线连接。

所以如何打开包装 字典可选值?还是我想念什么?谢谢

1 个答案:

答案 0 :(得分:1)

不要那样做。 JSON字典从不具有可选值。

使用不同的非可选值创建params,然后添加可以为nil的键/值对。 如果createAfterStrcreateBeforeStrnil,则会跳过该密钥。

typealias JSON = [String:Any]

var params: JSON = ["scope_id": statesByScope.scopeId, "limit" : "4"]
params["createdAfter"] = createAfterStr
params["createdBefore"] = createBeforeStr