swift - 勝手にnilが無視される挙動を使って安全? - スタック・オーバーフロー
では、ディクショナリにおけるnilの削除挙動の質問をしました。

同様のソースをここに再掲しますが、

let hoge: String? = nil
let foo: String? = "foo"

var dict = [String: Any]()

if let hoge = hoge {
    dict["hoge"] = hoge
}

if let foo = foo {
    dict["foo"] = foo
}

print(dict) // => ["foo": "foo"]

やはり if let の連続が書きにくいし、読みにくい。
なんとかして別の手段はないかと思い map を試しました。

let hoge: String? = nil
let foo: String? = "foo"
var dict = [String: Any]()

hoge.map{ dict["hoge"] = $0 }
foo.map{ dict["foo"] = $0 }

これで目的が達成できたように感じます... しかしここで疑問が...

  • 質問1. mapは返り値をなにかに代入する目的のもののはず、この使い方は正しいのか?
  • 質問2. なぜ Result of call to 'map' is unused の警告はでないのか?

蛇足ですが、質問2の警告がたまたまXcodeの調子で出ないだけかと思い、

func bar() -> String? {
    return "f"
}

という関数を作ってみたところ添付画像のように警告は出ていました。
画像の説明をここに入力

さらに蛇足ですが、なぜ bar関数の戻り値をString?とオプショナルにしたかというと、
mapの定義が下記のようになっていたので -> U? の部分に似せることができるかと考えたためです。
public func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?
(ただし、私がクロージャとジェネリクスが混合して書かれた型の読み方に慣れておらず、なにか勘違いしている可能性があります...)