CC Doug Gregor, who git blame tells me wrote this part.

Doug, this slightly predates noescape-by-default. Is this a bug or as intended?


> On Mar 28, 2017, at 8:49 AM, Elia Cereda via swift-users 
> <swift-users@swift.org> wrote:
> 
> Hi Dennis,
> 
> Thanks for your answer. I can see that my message needs some more context: 
> RecoverableError is a protocol in the standard library that can be 
> implemented to opt in to the error recovery mechanism available on macOS. 
> attemptRecovery(optionIndex, resultHandler:) is one of the methods that have 
> to be implemented to conform to the protocol.
> 
> Here you can find the other ones:
> 
> /// Describes an error that may be recoverable by presenting several
> /// potential recovery options to the user.
> public protocol RecoverableError : Error {
> 
>     /// Provides a set of possible recovery options to present to the user.
>     public var recoveryOptions: [String] { get }
> 
>     /// Attempt to recover from this error when the user selected the
>     /// option at the given index. This routine must call handler and
>     /// indicate whether recovery was successful (or not).
>     ///
>     /// This entry point is used for recovery of errors handled at a
>     /// "document" granularity, that do not affect the entire
>     /// application.
>     public func attemptRecovery(optionIndex recoveryOptionIndex: Int, 
> resultHandler handler: (Bool) -> Swift.Void)
> 
>     /// Attempt to recover from this error when the user selected the
>     /// option at the given index. Returns true to indicate
>     /// successful recovery, and false otherwise.
>     ///
>     /// This entry point is used for recovery of errors handled at
>     /// the "application" granularity, where nothing else in the
>     /// application can proceed until the attempted error recovery
>     /// completes.
>     public func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool
> }
> 
> As you can see, there are two attemptRecovery methods. In my mind the first 
> one was meant to be used for asynchronous operations, where you run some 
> recovering code in background and then report its result back to the caller.
> 
> The problem is that the handler is not marked as @escaping and as such it can 
> only be used inside the body of attemptRecovery. I was wondering if this was 
> an oversight from the stdlib team or if this was a deliberate design decision.
> 
> I just saw that the method is still not marked as @escaping in master 
> (https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/NSError.swift#L105
>  
> <https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/NSError.swift#L105>),
>  so I’d like to know what its intended use case is, since the obvious one 
> (asynchronous recovery) is prevented by the missing annotation.
> 
> Thanks,
> Elia Cereda
> 
>> Il giorno 28 mar 2017, alle ore 17:33, Dennis Weissmann 
>> <den...@dennisweissmann.me <mailto:den...@dennisweissmann.me>> ha scritto:
>> 
>> Hey Elia,
>> 
>> I'm currently on mobile and don't really know what you're talking about 
>> (what is RecoverableError?) but you say it's a block, and if the closure is 
>> optional, it is @escaping by default.
>> 
>> Did you see 
>> https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160905/003185.html
>>  
>> <https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160905/003185.html>
>> 
>> - Dennis
>> 
>> Sent from my iPhone
>> 
>> On 23. Mar 2017, at 10:07 AM, Elia Cereda via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>>> I'd like to bump this issue, since it has been some time and it hasn't been 
>>> addressed.
>>> 
>>> Thanks,
>>> Elia Cereda
>>> 
>>> Il giorno 03 mar 2017, alle ore 21:33, Elia Cereda <eliacer...@gmail.com 
>>> <mailto:eliacer...@gmail.com>> ha scritto:
>>> 
>>>> I’m wondering why the resultHandler block on 
>>>> RecoverableError.attemptRecovery(optionIndex, resultHandler:) is not 
>>>> marked @escaping?
>>>> 
>>>> I’m trying to invoke some recovering code that executes asynchronously, 
>>>> then reports if it was successful or not and I thought that this was the 
>>>> right strategy. As far as I can tell, without @escaping that method loses 
>>>> all it’s purpose and becomes essentially equivalent to 
>>>> attemptRecovery(optionIndex:).
>>>> 
>>>> So, I’d like to ask.
>>>> 1. Is it a bug or that method is non-escaping on purpose?
>>>> 2. If it is a bug, is there a workaround that can be applied pending a fix 
>>>> in a future version of Swift?
>>>> 3. If it was a deliberate decision, what's the supported method of 
>>>> asynchronously invoking error recovery code?
>>>> 
>>>> Seeing that this wasn’t changed in Xcode 8.3b2, I think it unlikely that 
>>>> this was an oversight.
>>>> 
>>>> Thanks,
>>>> Elia Cereda
>>>> 
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users@swift.org <mailto:swift-users@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>> <https://lists.swift.org/mailman/listinfo/swift-users>
> 
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

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

Reply via email to