Swift5.3 つまみ食い【SE-0269編】
SE-0269 - Increase availability of implicit self in @escaping closures when reference cycles are unlikely to occur
Modify the rule that all uses of self in escaping closures must be explicit by allowing for implicit uses of self in situations where the user has already made their intent explicit, or where strong reference cycles are otherwise unlikely to occur.
Swift5.3 では @escaping
クロージャ 内での self
暗黙的な使用が許可されたみたいです。また、下記のように参照型の場合は、[self]
を明示的に記述することで、後のメンバーの参照に関しては暗黙的に self
が使用されるようになり、値型の場合は、その下のサンプルのように循環参照の可能性がないため、そのまま self
を省略することができます。
class Test { var x = 0 func execute(_ work: @escaping () -> Void) { work() } func method() { execute { [self] in x += 1 } } }
struct Test { var x = 0 func execute(_ work: @escaping () -> Void) { work() } func method() { execute { x += 1 } } }
これは便利ですね🎉