1. ホーム
  2. swift

Swift辞書にnil値を追加する方法は?

2023-10-09 07:41:05

質問

私のアプリでサーバーにリクエストを行い、以下のようなデータを投稿しました。サーバー側では、すべてのパラメータがnilであっても待機しています。しかし、私は辞書にnil値を追加することができませんでした。

 var postDict = Dictionary<String,AnyObject>
 postDict[pass]=123
 postDict[name]="ali"
 postDict[surname]=nil // dictionary still has only pass and name variables.

辞書にnil値を追加する方法はありますか?

どのように解決するのですか?

どのように追加する nil の値をSwift辞書に追加する方法は?

基本的に、辞書に他の値を追加するのと同じ方法です。最初に、値を保持することができる値の型を持つ辞書が必要です。型は AnyObject は値を持つことができません。 nil . ですから [String : AnyObject] を持つことはできません。 nil .

のように、値の型がオプショナルな辞書があったとします。 [String : AnyObject?] のような値型を持つ辞書があった場合、その辞書は nil の値を保持することができます。例えば

let x : [String : AnyObject?] = ["foo" : nil]

要素を割り当てるために添え字構文を使用したい場合、それは少し厄介です。型の添え字は [K:V] は、タイプ V? . オプショナルは,取り出すときに,そのキーに対応するエントリがあるかどうか,ある場合はその値を示すためのものです. nil ).

つまり、この辞書の型は [String : AnyObject?] の場合、添え字はタイプ AnyObject?? . ここでも、添え字に値を入れると、"outer" オプションで値の設定やエントリの削除ができるようになります。もし、単に

x["foo"] = nil

とすると、コンパイラはそれを nil という型の AnyObject?? のエントリを削除することを意味します。 "foo" .

を行うためには を設定します。 の値は、キー "foo"AnyObject?nil を渡す必要があります。 nil 外側オプショナルで、内側オプショナル (型は AnyObject? のタイプ)を含む。 nil . これを実現するためには

let v : AnyObject? = nil
x["foo"] = v

または

x["foo"] = nil as AnyObject?

を示すものはすべて nilAnyObject? であって AnyObject?? .