値が自选な字典のnil値の取り扱い

今朝呟いた本件ですが,色々补足しつつ记事としてまとめました。

値が自选な字典とは?

値がOptionalなDictionaryとは例えば次のようなものを指しています(値がOptionalなことが大事なのでString型以外でも何でも良いです)。

  var d = [String:String?]() 

以下の糖衣构文ですが,上の简単な记述とするのが一般的なはずです。

  var d = Dictionary <String,可选>() 

倾向于として値が可选な词典を扱うのはなるべくやめた方が良いと思っている

,例えば以下のように非Optionalでも下标して取った结果はString?となります。

  var d = [String:String]() 
让x:字符串? = d [“ key”]

もし値がOptionalだと,次のように取得结果がString??Optional<Optional> )とOptionalのネストになってしまいます。

  var d = [String:String?]() 
让x:字符串? = d [“ key”]

词典の各种处理の戻り値自体がこのように任选ように返すものが多いため,値の型自体が任选だとややこしくなります。大抵抗は値の型自体を任选にすることなく词典が包含する任选だけますハンドリングできると思っています。

とはいえどうしても値を可选としたいこともありえるかもしれませんし,色々いじってたら面白かった,という次第です(・‿・`)

ちょっと相对きが长くなりましたが,以下本题です。