Avatar
僕の認識ですと // ここに main actor context が引き継がれることが保証されていないと何も信じられない そこはmain actor contextだと思っていて、いやClosure内部なので保証されていない気がする runEscapingfunc runEscaping(_ operation: @escaping () -> Void) { Task.detached { // actorのcontextは引き継がないのでmain actor contextではない operation() } } とコンパイラが判定していると思ってました。 あと、今再確認したら↓はSwift5.7だとエラーになりますね(昨日はなんかキャッシュが残っていたようです) func run(_ operation: () -> Void) { operation() } func runEscaping(_ operation: @escaping () -> Void) { operation() } @MainActor final class Bar { var count: Int = 0 func countUp() { run { count += 1 } runEscaping { [weak self] in guard let self = self else { return } print(self.count) // :x: Property 'count' isolated to global actor 'MainActor' can not be referenced from a non-isolated synchronous context } } } (edited)