> do {
>     let action = chooseAction(game)
>     game = try game.applyAction(action)
> } catch let e as ActionError {
>     game.failedAction = e
> } catch _ {
>     fatalError(“This is an unfortunate bit of noise :/")
> }

If you're just worried about the noise...

        try! {
                do {
                        let action = chooseAction(game)
                        game = try game.applyAction(action)
                }
                catch let e as ActionError {
                        game.failedAction = e
                }
        }()

Or if that's too much syntax:

        func mustSucceed<Return>(function: () throws -> Return) -> Return {
                return try! function()
        }
        
        mustSucceed {
                do {
                        let action = chooseAction(game)
                        game = try game.applyAction(action)
                }
                catch let e as ActionError {
                        game.failedAction = e
                }
        }

Or, if you use this specific ActionError logic widely, you can put that in a 
function:

        func catchActionError<Return>(function: () throws -> Return) -> Return? 
{
                do {
                        return try function()
                }
                catch e as ActionError {
                        game.failedAction = e
                        return nil
                }
                catch {
                        fatalError()
                }
        }
        
        catchActionError {
                let action = chooseAction(game)
                game = try game.applyAction(action)
        }

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to