4

Swift2.2 では、Optional次のような拡張機能があります。

extension Optional {
    func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? {
        switch self {
        case .some (let wrapped):
            return closure(wrapped)
        case .none:
            return nil
        }
    }
}

次のようなコードを可能にします

anImageView.image = self.something.ifNotNil { self.getImageFor($0) }

しかし、時々、私は結果を気にしません:

myBSON["key"].string.ifNotNil {
    print($0}
}

Swift2.2 では、それは魔法のように機能しました。しかし、新しい XCode8 Beta を起動して Swift3 に変換すると、2 番目のタイプを実行するとどこでも警告が表示されます。あたかも暗黙の があるかのよう@warn_unused_resultです。これは初期のベータ版のバグですか? または、Swift3 ではもうできないことはありますか? または、Swift3 で新しく修正する必要があるものはありますか?

4

1 に答える 1

9

次を使用して結果を破棄できます。

_ = myBSON["key"].string.ifNotNil {
    print($0}
}

または、未使用の結果について警告しないようにメソッドをマークします。

extension Optional {

    @discardableResult func ifNotNil<T>(_ closure:(Wrapped) -> T) -> T? {
        switch self {
        case .some (let wrapped):
            return closure(wrapped)
        case .none:
            return nil
        }
    }
}

参考:SE-0047

于 2016-06-14T20:15:18.063 に答える