[swift-evolution] Proposal: Allow Type Annotations on Throws

Félix Cloutier felixcca at yahoo.ca
Sat Dec 19 14:15:04 CST 2015


Right now, it's because throws does not specify a type to be thrown, and the compiler doesn't know that you've checked all the possibilities. For all it knows, it could be something else than a MyError.

> Le 18 déc. 2015 à 21:28:41, Ricardo Parada via swift-evolution <swift-evolution at swift.org> a écrit :
> 
> Thanks for the clarification.  Why is the compiler saying that the catch is not exhaustive when it is covering all the possible values of the enum?  Is it to be able to catch future values added to the enum type?
> 
> 
>> On Dec 18, 2015, at 8:05 PM, David Owens II <david at owensd.io <mailto:david at owensd.io>> wrote:
>> 
>> 
>>> On Dec 18, 2015, at 4:38 PM, Ricardo Parada <rparada at mac.com <mailto:rparada at mac.com>> wrote:
>>> 
>>> Hi David
>>> 
>>> I started reading your proposal and I have a couple of questions. 
>>> 
>>> In the Enum Base ErrorType example you mentioned that it requires a "catch { }" clause.  However the code is already covering the two possible Enum values (OffBy1 and MutatedValue). Why is the "catch { }" required? I typed that code into a playground and I did not get any errors. Are you saying that because the Enum type could add a value in the future?
>> 
>> Playgrounds are basically in an anonymous function that throws, so the problem doesn’t show up there at the top level. Copy this into your playground.
>> 
>> enum MyError: ErrorType {
>>     case OnlyOne
>> }
>> 
>> func thrower() throws { throw MyError.OnlyOne }
>> 
>> func nolies() {
>>     do {
>>         try thrower()
>>     }
>>     catch MyError.OnlyOne { print("handled") }
>>     // catch { print("compiler error until uncommented") }
>> }
>> 
>>> Also, you proposed the catch clause to use error as the name of the constant holding the error.  Wouldn't it be better to let the programmer decide the name rather than hard coding it to use error? For example:
>>> 
>>> catch e where e.value == 0 { print("0") }
>>> catch e where e.value == 1 { print("1") }
>>> catch { print("nothing") }
>> 
>> The “error” name is already specified in the Swift rules for what the constant is. I don’t see any compelling reason to propose a change to that.
>> 
>> -David
> 
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151219/b4fde2ce/attachment.html>


More information about the swift-evolution mailing list