2017-07-05 9 views
0

オプションの値を持つ辞書キーの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"] 

とするとき、私は、パラメータカール要求としてでそれを送っています。

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と本当に有線部分である:私は、URLのメイクに見えます。

アンラップする方法 言い換えれば任意の値ですか?私は何かが恋しいですか?ありがとう

+0

言語ガイドをお読みください。 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html – Alexander

+0

'createAfterStr ?? nil' "createAfterStr'が' nil'の場合、代わりに 'nil'のデフォルト値を使用してください。... ...意味がありません – Alexander

+0

@Alexanderありがとうございます。私の質問を更新して、今すぐクリアすることを願ってください。もしあなたがそれを好きなら、投票してください。 –

答えて

1

しないでください。 JSON辞書にはオプションの値はありません。

別の非オプション値を使用してparamsを作成し、nilのキー/値のペアを追加します。 createAfterStrまたはcreateBeforeStrnilの場合、キーはスキップされます。

typealias JSON = [String:Any] 

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

ありがとう –

関連する問題