> On Jun 30, 2017, at 12:25 PM, Mike Ferenduros <mike.ferendu...@gmail.com> 
> wrote:
> 
> 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.

I see. Using `withExtendedLifetime` inside the closure still ought to guarantee 
that the closure captures the variable, and will have the effect of keeping it 
alive till the closure dies.

-Joe

>> 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