I actually half agree with you that this behaviour would be conceptually 
related to the do-catch block (although not a specific catch statement). So 
maybe alternatively the shorthand for this-

    do {
        try throwingFunction()
    } catch MyError.TheError {
        // do something
    } catch {
       fatalError("Expected error?")
    }

could be instead-

    do! {
        try throwingFunction()
    } catch MyError.TheError {
        // do something
    }

This would also avoid any conflict with existing behaviour.

Cheers,
Simon

> On 6 May 2017, at 1:26 pm, Xiaodi Wu <xiaodi...@gmail.com> wrote:
> 
> _If_ this is something that's important, then the ! should follow 'catch' and 
> not 'try'.
> 
> The keyword 'try!' already means something, and it's not that. People may 
> already mix try! and try in a do block and the behavior cannot be changed for 
> source compatibility.
> On Sat, May 6, 2017 at 15:16 Simon Pilkington via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> As a number of recent threads have shown, typed throws and error handling is 
> a complicated topic with a lot of implications.
> 
> However in the mean time we could potentially address one of the pain points 
> people give for wanting typed throws - exhaustive catch statements.
> 
> For functions that you completely control, it is possible to be completely 
> certain of the errors the function will throw and it is an unrecoverable 
> logical error for any other error to be thrown. Currently this situation 
> would have to be handled like so-
> 
> do {
>     try throwingFunction()
> } catch MyError.TheError(let theContext) {
>     // do something
> } catch {
>     fatalError(“Impossible error?")
> }
> 
> Here, the catch-all is just boilerplate to make the catch statement 
> exhaustive but doesn’t provide any value to the programmer. Would it make 
> sense to provide a shorthand for this case like this-
> 
> do {
>     try! throwingFunction()
> } catch MyError.TheError(let theContext) {
>     // do something
> }
> 
> Where the try! still indicates the call could fatalError if the function 
> throws an unmatched error but allows the programmer to specify the errors 
> that they specifically want to handle. I don’t think this moves the language 
> away from the possibility of typed throws; adding typed throws would likely 
> cause a warning in both cases - either to remove the catch-all or all the ! - 
> if the compiler could determine the catch was now exhaustive without them.
> 
> If this has been proposed elsewhere I apologise. 
> 
> Cheers,
> Simon
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>

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

Reply via email to