iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

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.

参照: https://github.com/apple/swift-evolution/blob/master/proposals/0269-implicit-self-explicit-capture.md#introduction

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

これは便利ですね🎉

参考

swift.org

github.com

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com