[swift-evolution] [Proposal] Allow upgrading weak self to strong self by assignment
Shawn Erickson
shawnce at gmail.com
Fri Feb 19 17:12:43 CST 2016
Kurt curious... the "[unowed self]? in" style... is that part of another
proposal? The one I hit on is talking about using "[guard self] in".
On Fri, Feb 19, 2016 at 3:08 PM Shawn Erickson <shawnce at gmail.com> wrote:
> I am talking about when capturing weak. The unowned capture situation is
> the simpler variant of weak, one that doesn't happen to exhibit the
> gyration of strongifying a weak capture.
>
> In the weak situation you most often want to promote the captured weak
> reference to a strong reference for some scope of code. You have to do this
> currently by assigning the one or more captured weak references you have to
> a differently named strong reference.
>
> Additionally it isn't clear to me how a block with multiple captures would
> play in what you are proposing.
>
> If the strongify situation could be improved by allowing a captured weak
> reference to be made strong while avoiding the renaming gyration then I
> could see that being coupled with the "[weak/unowned foo]? in" no-op case
> (assuming folks see enough reason for the no-op case).
>
> -Shawn
>
> On Fri, Feb 19, 2016 at 2:47 PM Kurt Werle <kurt at circlew.org> wrote:
>
>> And to follow up on my own email, isn't that exactly the flow you want?
>>
>> First you do
>> { [unowned self]? in
>> ...
>> }
>>
>> Then you realize that you need to deal with the else case. You nuke the
>> ? and add a guard.
>> { [unowned self] in
>> guard if unowned self != nil self {
>> ...
>>
>> I mean -- I look at that and it seems clear and easy. You have the ? to
>> deal with the nil case. You remove it and add the block to deal with the
>> special nil case. The intention of both seems clear. You added the guard
>> code when you needed it.
>>
>> Sign me up!
>> Kurt
>>
>> On Fri, Feb 19, 2016 at 2:39 PM, Kurt Werle <kurt at circlew.org> wrote:
>>
>>>
>>>
>>> On Fri, Feb 19, 2016 at 2:30 PM, Shawn Erickson <shawnce at gmail.com>
>>> wrote:
>>>
>>>> I get that :) but I think it would be helpful to go beyond the no-op
>>>> case and help solve the "strongify" situation that exists in the larger
>>>> problem domain.
>>>>
>>>>>
>>> OK - so what's wrong with:
>>>
>>>
>>>> { [unowned self] in
>>>>> guard self != nil else {
>>>>> Do the other thing
>>>>> }
>>>>> }
>>>>>
>>>>
>>> It's basically what you're asking for - an unowned implicitly unwrapped
>>> variable followed by an else statement that takes care of the nil case.
>>> Right?
>>>
>>> Kurt
>>> --
>>> kurt at CircleW.org
>>> http://www.CircleW.org/kurt/
>>>
>>
>>
>>
>> --
>> kurt at CircleW.org
>> http://www.CircleW.org/kurt/
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160219/7a75c631/attachment.html>
More information about the swift-evolution
mailing list