I recall that there was quite a bit of discussion a while back about adding 
typed error declarations for methods that throw for the purpose of exhaustive 
pattern matching on errors.

There were interesting arguments on either side, and I think that the result 
was to maintain the status quo. There’s still the issue of having to add the 
extra catch statement to every do block for exhaustive matches.

Would it be wise to allow force conversion for the cases in which the developer 
believes the match is exhaustive? ie

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 :/")
}

becomes

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


Also as a brief aside, it’s not super intuitive to me that the syntax for the 
catch pattern matching wildcard is 

catch _

whereas it is

default
 
for switches. I think I saw Chris mention somewhere that default was chosen 
because of it’s wide familiarity. Does anyone recall the reason?

Thanks,

Tyler
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to