I believe the scoped @discardableResult(warn|critical) attribute is a nice idea 
for future directions, but I'm not sure it's in scope of this proposal, which, 
as a first small step, aims to basically invert the @warn_unused_result 
standard.

cc Erica


Pozdrawiam – Regards,
Adrian Kashivskyy

> Wiadomość napisana przez Haravikk <[email protected]> w dniu 
> 21.03.2016, o godz. 22:28:
> 
> 
>> On 21 Mar 2016, at 20:35, Erica Sadun via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> In Swift Evolution discussions, the term @discardable was mildly preferred 
>> over @discardableResult.
>> 
>> Some community members requested a new attribute enabling exceptional 
>> imported functions to be properly annotated from Objective-C source.
>> 
>> Dany St-Amant requested two levels of compiler response: 
>> @discardableResult(warn) for simple warnings and 
>> @discardableResult(critical) which generates an error with unused results, 
>> such as when returning allocated resources
>> 
>> 
> 
> This looks good, I think that @discardableResult() makes sense until we can 
> get @discardable on the return type itself. I think that if warn/critical is 
> added then there should also be a corresponding “allow” or similar (which is 
> what the default is), i.e- @discardableResult on its own implies 
> @discardResult(allow) to issue no warnings of any kind.
> 
> I also like the idea of being able to add this attribute to types as well as 
> functions, allowing the default behaviour to be changed on a per-type basis, 
> as this would be useful for types that are specifically designed with method 
> chaining for example (where most results are discardable as standard). While 
> the choice of default will never satisfy everyone, this would make it easy to 
> tweak for your own needs.
> 
> Allow us to do something like the following, assuming that 
> @discardableResult(warn) is now the default:
> 
>       @discardableResult(allow)
>       class MyChainableType {
>               func chainableMethod() -> Self { … }
>               func anotherChainableMethod() -> Self { … }
> 
>               @discardableResult(critical)
>               func getResult() -> Dictionary { … }
>       }
> 
> Of course, if we can get attributes on return types now or in future, then 
> the function form of the attribute should be @discardable(warn) for 
> .getResult().

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

Reply via email to