swiftswiftuiswift-concurrencymainactor

How does the Xcode 's document knows my custom view is a MainActor


CityView is a custom View in a demo project , But the Xcode's documents says it was a @MainActor , and CityView isn't defined as @MainActor in project .

How does the Xcode's help document knows it was a @MainActor?

Is it means anything conform to View protocol is a @MainActor?

enter image description here


Solution

  • Is it means anything conform to View protocol is a @MainActor?

    Yes, because the View protocol is marked @MainActor.

    @MainActor @preconcurrency
    protocol View { ... }
    

    Types that conform to it are implcitly marked @MainActor too. Note that being isolated to the main actor is not a requirement of the protocol. You can opt out by adding nonisolated:

    nonisolated struct CityView: View { ... }
    

    Before Swift 6.2, you can do

    struct CityView: View, _RemoveGlobalActorIsolation { ... }