self. in trailing swift closures, meaning and purpose?

后端 未结 1 496
情深已故
情深已故 2021-01-21 16:35

whenever I use a trailing closure on an action ... example:

run(SKAction.wait(forDuration: 10)){timeRemains = false}

I’m seeing this:

1条回答
  •  孤城傲影
    2021-01-21 17:10

    Does it have some profound meaning, and will I magically understand closures if I understand this?

    No and no. Or perhaps, maybe and maybe.

    The reason for this syntactical demand is that this might really be a closure, that is, it might capture and preserve its referenced environment (because the anonymous function you are passing might be stored somewhere for a while). That means that if you refer here to some property of self, such as myProperty, you are in fact capturing a reference to self. Swift demands that you acknowledge this fact explicitly (by saying self.myProperty, not merely myProperty) so that you understand that this is what's happening.

    Why do you need to understand it? Because under some circumstances you can end up with a retain cycle, or in some other way preserving the life of self in ways that you didn't expect. This is a way of getting you to think about that fact.

    (If it is known that this particular function will not act as a closure, i.e. that it will be executed immediately, then there is no such danger and Swift will not demand that you say self explicitly.)

    0 讨论(0)
提交回复
热议问题