---
title: Actors can’t conform to global actor protocols (ActorConformanceToGlobalActorProtocol)
framework: Swift Compiler
role: article
role_heading: Article
path: swift-compiler/documentation/diagnostics/actors-cannot-conform-to-global-actor-protocols
---

# Actors can’t conform to global actor protocols (ActorConformanceToGlobalActorProtocol)

## Overview

Overview Adding a protocol conformance to an actor will emit a compiler error if that protocol requires global actor isolation. For example: @MainActor protocol Exhibit {     func display() }

actor Terrarium: Exhibit { // error: actor 'Terrarium' cannot conform to global-actor-isolated protocol 'Exhibit'     func display() {         // Terrarium instance isolated     }     func water() {         // Terrarium instance isolated     } } A protocol requiring global actor isolation (like Exhibit above) makes all methods and properties on conforming types inherit that global actor’s isolation. But methods and properties in actor types (like Terrarium) already inherit that actor’s isolation! This makes actors incompatible with protocols that require a global actor isolation: methods can’t be isolated to both the actor instance and the global actor. Consider the display() method in the example above. Should it be isolated to the @MainActor, or to an instance of the Terrarium actor? What about water()? The most common solution is to ensure both the protocol and the implementation have the same isolation. For example, by applying the same global actor isolation to both, instead of using an actor instance for the latter: @MainActor protocol Exhibit {     func display() }

@MainActor final class Terrarium: Exhibit { // OK     func display() {         // MainActor isolated     }     func water() {         // MainActor isolated     } } Alternatively, you can move the global actor isolation annotation to individual protocol requirements, and have the implementation use the same isolation for those methods: protocol Exhibit {     @MainActor func display() }

actor Terrarium: Exhibit { // OK     @MainActor func display() {         // MainActor isolated     }     func water() {         // Terrarium instance isolated     } } If the protocol requirements are all async functions with Sendable parameters and results, it’s possible to have an implementation with a different isolation: protocol Exhibit {     @MainActor func display() async }

actor Terrarium: Exhibit { // OK     func display() async {         // Terrarium instance isolated     }     func water() {         // Terrarium instance isolated     } } This is possible because async methods require a suspension point at the call site. After the caller suspends, the implementation can be resumed in a different isolation (the Terrarium actor instance) so long as all parameters and result types can be sent between isolations. Once completed, the implementation can suspend again and return to the caller.

## See Also

- [@dynamicCallable implementation requirements (DynamicCallable)](swift-compiler/documentation/diagnostics/dynamic-callable-requirements.md)
- [Add @preconcurrency import (AddPreconcurrencyImport)](swift-compiler/documentation/diagnostics/add-preconcurrency-import.md)
- [Always enabled availability domains (AlwaysAvailableDomain)](swift-compiler/documentation/diagnostics/always-available-domain.md)
- [Argument matching for trailing closures (TrailingClosureMatching)](swift-compiler/documentation/diagnostics/trailing-closure-matching.md)
- [Calling a mutating async actor-isolated method (ActorIsolatedMutatingAsync)](swift-compiler/documentation/diagnostics/actor-isolated-mutating-async.md)
- [Calling an actor-isolated method from a synchronous nonisolated context (ActorIsolatedCall)](swift-compiler/documentation/diagnostics/actor-isolated-call.md)
- [Captures in a `@Sendable` closure (SendableClosureCaptures)](swift-compiler/documentation/diagnostics/sendable-closure-captures.md)
- [Compilation caching (CompilationCaching)](swift-compiler/documentation/diagnostics/compilation-caching.md)
- [Conforming to `StringInterpolationProtocol` (StringInterpolationConformance)](swift-compiler/documentation/diagnostics/string-interpolation-conformance.md)
- [Conversion from `@isolated(any)` function type to synchronous function type (ConversionFromIsolatedAnyToSynchronous)](swift-compiler/documentation/diagnostics/conversion-from-isolated-any-to-synchronous.md)
- [Cross-isolation data race (RegionIsolationCrossIsolationDataRace)](swift-compiler/documentation/diagnostics/region-isolation-cross-isolation-data-race.md)
- [Deprecated declaration warnings (DeprecatedDeclaration)](swift-compiler/documentation/diagnostics/deprecated-declaration.md)
- [Deprecated implementation-only imports (ImplementationOnlyDeprecated)](swift-compiler/documentation/diagnostics/implementation-only-deprecated.md)
- [Dynamic exclusivity (DynamicExclusivity)](swift-compiler/documentation/diagnostics/dynamic-exclusivity.md)
- [Embedded Swift language restrictions (EmbeddedRestrictions)](swift-compiler/documentation/diagnostics/embedded-restrictions.md)
