Closures can throw too. The ability to throw is part of the function type. Keywords preceding ‘func’ relate to the method, as a ‘container’ entity for the function, rather than the function itself.
I agree the syntax is odd, the keyword should probably come after the arrow.
Relatedly, what happened to the follow up proposal to change @discardableResult to an @discardable annotation on the return type? As it is, closure properties can't have discardable results.
------------ Begin Message ------------
Group: gmane.comp.lang.swift.evolution
MsgID: <1468950690.1969779.670846257.58EFBDA2@webmail.messagingengine.com>
Hello,
I'm currently reading the updated Swift 3 preview book, and was
wondering about the `throws` and `rethrows` keywords.
In a function declaration, all the keywords are at the beginning, except
for `throws` and `rethrows`, which are⦠oddly placed.
In the grammar:
*function-declaration *â *function-head[1] Âfunction-name[2]Â **generic-parameter-clause[3]Â*optÂ*function-
signature[4]Â **function-body[5]Â*optÂ
*function-head *â *attributes[6]Â*optÂ*declaration-
modifiers[7]Â*optÂfuncÂ
*function-signature *â *parameter-clause[8]Â*throwsÂoptÂ*function-
result[9]Â*optÂ
*function-signature *â *parameter-clause[10]Â*rethrowsÂ*function-
result[11]Â*optÂ
Is there a reason to have throws and rethrows at this specific position,
instead of declaration-modifiers?
ie.:
This:
func send() throws -> String {}
Becomes:
throwing func send() -> String {}
rethrowing func send() -> String {}
Like:
mutating func send() -> String {}
Or:
throw func send() -> String {}
rethrow func send() -> String {}
Like:
override func send() -> String {}
(You can also see the weird difference between `override` and
`mutating`, one using the -ing suffix, the other being infinitive)
Am I missing something? I find that these keywords break the flow of the
function declaration, separating the parameters and the return type,
which is never done anywhere else.
Thanks.
···
--
Matthieu Oger
Pixelnest Studio[12]
Â
Links:
1. Declarations — The Swift Programming Language (Swift 5.7)
2. Declarations — The Swift Programming Language (Swift 5.7)
3. Generic Parameters and Arguments — The Swift Programming Language (Swift 5.7)
4. Declarations — The Swift Programming Language (Swift 5.7)
5. Declarations — The Swift Programming Language (Swift 5.7)
6. Attributes — The Swift Programming Language (Swift 5.7)
7. Declarations — The Swift Programming Language (Swift 5.7)
8. Declarations — The Swift Programming Language (Swift 5.7)
9. Declarations — The Swift Programming Language (Swift 5.7)
10. Declarations — The Swift Programming Language (Swift 5.7)
11. Declarations — The Swift Programming Language (Swift 5.7)
12. http://pixelnest.io/
------------- End Message -------------
From James F