技術ブログを開設する
ログイン
もっと気軽にアウトプットできる技術ブログプラットフォーム

Swiftのtry?の仕様変更が採択された

採択アナウンス https://forums.swift.org/t/accepted-se-230-flatten-nested-optionals-resulting-from-try/17376

これまでのSwiftでは、try?オペレータは常にそのオペランド式のOptionalを返していた。式の返り値がOptionalだった場合、これは2重オプショナルになるため、取扱が面倒だった。

// Pattern 2: Introducing parentheses to let 'as?' flatten for us
if let x = (try? somethingAsAny()) as? JournalEntry {
    // use 'x' here
}

新仕様では、try?が二重オプショナルを生み出す場合、暗黙にflattenされ一重オプショナルになり、取り扱いやすくなる。

// Swift 4: 'Int??'
// Swift 5: 'Int?'
let result = try? database?.countOfRows(matching: predicate)

このような暗黙flattenはSwiftにおいてすでに存在している。 ?. によるメソッドチェーンがそうだ。

このような文法の下位互換を破壊する仕様変更は、 最近はなかなか見かけなかったのでワクワクする。

関連記事

この記事へのコメント

11/02 14:34

これはうれしいですね

5
@omochimetaruの技術ブログ
5
このエントリーをはてなブックマークに追加