Ah, I think I was unclear - I want to extend the lifetime into an escaping 
closure, not just within a scope, and I was wondering what the minimal way is 
to do that.

> On 30 Jun 2017, at 22:15, Joe Groff <jgr...@apple.com> wrote:
> 
> 
>> On Jun 30, 2017, at 12:13 PM, Mike Ferenduros <mike.ferendu...@gmail.com> 
>> wrote:
>> 
>> With an empty body, you mean?
> 
> I'd say it's probably more readable to nest the code that's dependent on the 
> lifetime of the object in the block body, though you can just put 
> `withExtendedLifetime(x) { }` at the end of the region (or `defer { 
> withExtendedLifetime... }` at the beginning) if you can't have the nesting 
> for whatever reason.
> 
> -Joe
> 
>>> On 30 Jun 2017, at 22:00, Joe Groff <jgr...@apple.com> wrote:
>>> 
>>> 
>>>> On Jun 30, 2017, at 11:47 AM, Mike Ferenduros via swift-users 
>>>> <swift-users@swift.org> wrote:
>>>> 
>>>> I'm doing a RAII sort of thing with an object, and would like to keep it 
>>>> alive until an completion-block is called (asynchronously).
>>>> 
>>>> Is it sufficient to say '_ = x' in the completion-block to keep a live 
>>>> reference to the object?
>>>> 
>>>> I was told that the optimiser is free to discard this line, and thus the 
>>>> object could be freed prematurely depending on how the code is compiled. 
>>>> If so, is there an idiomatic way to do this? Or should I just avoid RAII 
>>>> in Swift?
>>> 
>>> `withExtendedLifetime(x) { ... }` is the supported way of extending the 
>>> lifetime of an object.
>>> 
>>> -Joe
> 
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to