プロトコル


Sendable


値をコピーすることで同時実行ドメイン間で安全に渡すことができる型。


iOS 8.0 iPadOS 8.0 macOS 10.10 Mac Catalyst 13.0

tvOS 9.0 WatchOS 2.0 VisionOS 1.0+


protocol Sendable






概観


Sendable な型の値を、ある同時実行ドメインから別のものに安全に渡すことができます。たとえば、actor のメソッドを呼び出すときに、sendable な値を引数として渡すことができます。以下のすべてを sendable としてマークできます。


  • 値型

  • 可変外部記憶 (storage) を持たない参照型

  • 状態へのアクセスを内部で管理する参照型

  • 関数とクロージャ (@Sendable でマークして)

  • このプロトコルには必須のメソッドやプロパティはありませんが、コンパイル時に強制されるセマンティック(意味的)要件があります。これらの要件は、以下のセクションにリストされています。Sendable への準拠は、型の宣言と同じファイルで宣言しなければなりません。


    コンパイラを全く強制せずに Sendable への準拠を宣言するには、@unchecked Sendable と記述して下さい。たとえば、その状態へのすべてのアクセスをロックやキューで保護するなど、チェックされていない sendable (送信可能) な型の正確性に対してあなたが責任を負います。Sendable への準拠性をチェックしないと、準拠性が同じファイル内になければならないというルールの適用も無効になります。


    Task が含まれる言語レベルの同時実行モデルの詳細については、Swift プログラミング言語同時実行 を参照してください。


    Sendable な構造体と列挙型


    Sendable プロトコルの要件を満たすには、列挙型または構造体には sendable なメンバーと関連値のみが含まれていなければなりません。場合によっては、要件を満たす構造体と列挙型が暗黙的に Sendable に準拠します。


  • Frozen (凍結された) 構造体と列挙型

  • public ではなく、@usableFromInline のマークが付いていない構造体と列挙型。

  • それ以外の場合は、Sendable への準拠を明示的に宣言する必要があります。


    送信不可能な格納プロパティを持つ構造体と送信不可能な関連値を持つ列挙型は、Sendable プロトコルの意味的要件を満たしていることを手動で確認した後、@unchecked Sendable としてマークされ、コンパイル時の正確性チェックを無効にすることができます。


    Sendable なアクター


    アクターは、その可変状態へのすべてのアクセスが順番に実行されることを保証するため、すべてのアクター型は暗黙的に Sendable に準拠します。


    Sendable なクラス


    Sendable なプロトコルの要件を満たすには、クラスは以下のことを行わなければなりません。


  • final とマークされる

  • 不変かつ Sendable な、格納されたプロパティのみを含む

  • スーパークラスがない、またはスーパークラスとして NSObject を持つ

  • @MainActor でマークされたクラスは、メインアクターがその状態へのすべてのアクセスを調整するため、暗黙的に sendable です。これらのクラスは、変更可能で送信不可能な格納されたプロパティを持てます。


    上記の要件を満たさないクラスは、Sendable プロトコルの意味的要件を満たしていることを手動で確認した後、@unchecked Sendable としてマークされ、コンパイル時の正確性チェックを無効にすることができます。


    Sendable な関数とクロージャ


    Sendable プロトコルに準拠する代わりに、sendable な関数とクロージャを @Sendable 属性でマークして下さい。関数またはクロージャがキャプチャする値はすべて sendable でなければなりません。さらに、sendable なクロージャは値によるキャプチャのみを使用しなければならず、キャプチャされた値は sendable な型でなければなりません。


    sendable なクロージャを期待するコンテキストでは、要件を満たすクロージャは暗黙的に Sendable に準拠します (たとえば、Task.detached(priority:operation:) への呼び出しで)。


    型注釈の一部として @Sendable を記述するか、クロージャのパラメータの前に @Sendable を記述することにより、クロージャを sendable として明示的にマークできます。たとえば以下のようになります。


    1. let sendableClosure = { @Sendable (number: Int) -> String in
    2. if number > 12 {
    3. return "More than a dozen."
    4. } else {
    5. return "Less than a dozen"
    6. }
    7. }


    Sendable なタプル


    Sendable プロトコルの要件を満たすには、タプルのすべての要素が sendable でなければなりません。要件を満たすタプルは暗黙的に Sendable に準拠します。



    Sendable なメタタイプ


    Int.Type などのメタタイプは暗黙的に Sendable プロトコルに準拠します。






    関連


    以下への継承


    Actor

    AnyActor

    Clock

    CodingKey

    DistributedActor

    DistributedActorSystem

    DistributedActorSystemError

    DurationProtocol

    Error

    Executor

    InstantProtocol

    SerialExecutor

    UnsafeSendable



    準拠型


    Array

    ElementSendable に準拠する場合に準拠します。


    ArraySlice

    ElementSendable に準拠する場合に準拠します。


    AsyncCompactMapSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し,ElementOfResultSendable に準拠し,Base.ElementSendable に準拠する場合に準拠します。


    AsyncCompactMapSequence.Iterator

    BaseAsyncSequence に準拠し、ElementOfResultSendable に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncDropFirstSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncDropFirstSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncDropWhileSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncDropWhileSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncFilterSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncFilterSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncFlatMapSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、SegmentOfResultSendable に準拠し、SegmentOfResultAsyncSequence に準拠し、Base.ElementSendable に準拠し、また SegmentOfResult.ElementSendable に準拠する場合に準拠します。


    AsyncFlatMapSequence.Iterator

    BaseAsyncSequence に準拠し、SegmentOfResultSendable に準拠し、SegmentOfResultAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠し、SegmentOfResult.AsyncIteratorSendable に準拠し、また SegmentOfResult.ElementSendable に準拠する場合に準拠します。


    AsyncMapSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、TransformedSendable に準拠し、また Base.ElementSendable に準拠する場合に準拠します。


    AsyncMapSequence.Iterator

    BaseAsyncSequence に準拠し、TransformedSendable に準拠し、Base.AsyncIteratorSendable に準拠し、また Base.ElementSendable に準拠する場合に準拠します。


    AsyncPrefixSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncPrefixSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncPrefixWhileSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、また Base.ElementSendable に準拠する場合に準拠します。


    AsyncPrefixWhileSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncStream

    ElementSendable に準拠する場合に準拠します。


    AsyncStream.Continuation


    AsyncThrowingCompactMapSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingCompactMapSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingDropWhileSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingDropWhileSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingFilterSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingFilterSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、また Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingFlatMapSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、SegmentOfResultSendable に準拠し、SegmentOfResultAsyncSequence に準拠し、Base.ElementSendable に準拠し、また SegmentOfResult.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingFlatMapSequence.Iterator

    BaseAsyncSequence に準拠し、SegmentOfResultSendable に準拠し、SegmentOfResultAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠し、SegmentOfResult.AsyncIteratorSendable に準拠し、また SegmentOfResult.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingMapSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、TransformedSendable に準拠し、また Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingMapSequence.Iterator

    BaseAsyncSequence に準拠し、TransformedSendable に準拠し、Base.AsyncIteratorSendable に準拠し、また Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingPrefixWhileSequence

    BaseSendable に準拠し、BaseAsyncSequence に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingPrefixWhileSequence.Iterator

    BaseAsyncSequence に準拠し、Base.AsyncIteratorSendable に準拠し、Base.ElementSendable に準拠する場合に準拠します。


    AsyncThrowingStream

    ElementSendable に準拠し、FailureError に準拠する場合に準拠します。


    AsyncThrowingStream.Continuation


    AutoreleasingUnsafeMutablePointer


    Bool


    CVaListPointer


    CancellationError


    Character


    CheckedContinuation


    ClosedRange

    BoundComparable および Sendable に準拠する場合に準拠します。


    ClosedRange.Index

    BoundSendable に準拠し、BoundStrideable に準拠し、また Bound.StrideSignedInteger に準拠する場合に準拠します。


    CodingUserInfoKey


    CollectionDifference

    ChangeElementSendable に準拠する場合に準拠します。


    CollectionDifference.Change

    ChangeElementSendable に準拠する場合に準拠します。


    CollectionDifference.Index

    ChangeElementSendable に準拠する場合に準拠します。


    CollectionOfOne

    ElementSendable に準拠する場合に準拠します。


    CollectionOfOne.Iterator

    ElementSendable に準拠する場合に準拠します。


    CommandLine


    ContiguousArray

    ElementSendable に準拠する場合に準拠します。


    ContinuousClock


    ContinuousClock.Instant


    DecodingError

    DecodingError.Context


    DefaultIndices

    ElementsCollection に準拠し、ElementsSendable に準拠し、また Elements.IndexSendable に準拠する場合に準拠します。


    DefaultStringInterpolation


    Dictionary

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    Dictionary.Index

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    Dictionary.Iterator

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    Dictionary.Keys

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    Dictionary.Keys.Iterator

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    Dictionary.Values

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    Dictionary.Values.Iterator

    KeyHashable に準拠し、KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    DiscardingTaskGroup


    DistributedActorCodingError


    Double


    Double.SIMD16Storage


    Double.SIMD2Storage


    Double.SIMD32Storage


    Double.SIMD4Storage


    Double.SIMD64Storage


    Double.SIMD8Storage


    Duration


    Duration.TimeFormatStyle


    Duration.TimeFormatStyle.Attributed


    Duration.TimeFormatStyle.Pattern


    Duration.UnitsFormatStyle


    Duration.UnitsFormatStyle.Attributed


    Duration.UnitsFormatStyle.FractionalPartDisplayStrategy


    Duration.UnitsFormatStyle.Unit


    Duration.UnitsFormatStyle.UnitWidth


    Duration.UnitsFormatStyle.ZeroValueUnitsDisplayStrategy


    EmptyCollection


    EmptyCollection.Iterator


    EncodingError


    EncodingError.Context


    ExecuteDistributedTargetError


    ExecutorJob


    Float


    Float.SIMD16Storage


    Float.SIMD2Storage


    Float.SIMD32Storage


    Float.SIMD4Storage


    Float.SIMD64Storage


    Float.SIMD8Storage


    Float16


    Float16.SIMD16Storage


    Float16.SIMD2Storage


    Float16.SIMD32Storage


    Float16.SIMD4Storage


    Float16.SIMD64Storage


    Float16.SIMD8Storage


    Float80


    FloatingPointClassification


    FloatingPointRoundingRule


    FloatingPointSign


    Hasher


    IndexingIterator

    ElementsCollection に準拠し、ElementsSendable に準拠し、また Elements.IndexSendable に準拠する場合に準拠します。


    Int


    Int.SIMD16Storage


    Int.SIMD2Storage


    Int.SIMD32Storage


    Int.SIMD4Storage


    Int.SIMD64Storage


    Int.SIMD8Storage


    Int.Words


    Int16


    Int16.SIMD16Storage


    Int16.SIMD2Storage


    Int16.SIMD32Storage


    Int16.SIMD4Storage


    Int16.SIMD64Storage


    Int16.SIMD8Storage


    Int16.Words


    Int32


    Int32.SIMD16Storage


    Int32.SIMD2Storage


    Int32.SIMD32Storage


    Int32.SIMD4Storage


    Int32.SIMD64Storage


    Int32.SIMD8Storage


    Int32.Words


    Int64


    Int64.SIMD16Storage


    Int64.SIMD2Storage


    Int64.SIMD32Storage


    Int64.SIMD4Storage


    Int64.SIMD64Storage


    Int64.SIMD8Storage


    Int64.Words


    Int8


    Int8.SIMD16Storage


    Int8.SIMD2Storage


    Int8.SIMD32Storage


    Int8.SIMD4Storage


    Int8.SIMD64Storage


    Int8.SIMD8Storage


    Int8.Words


    IteratorSequence

    BaseIteratorProtocol および Sendable に準拠する場合に準拠します。


    Job


    JobPriority


    KeyValuePairs

    KeySendable に準拠し、ValueSendable に準拠する場合に準拠します。


    LocalTestingActorID


    LocalTestingDistributedActorSystem


    LocalTestingDistributedActorSystemError


    MainActor


    ManagedBufferPointer


    MemoryLayout


    Mirror.DisplayStyle


    Never


    ObjectIdentifier


    ObservationRegistrar


    OpaquePointer


    Optional

    WrappedSendable に準拠する場合に準拠します。


    PartialRangeFrom

    BoundComparable および Sendable に準拠する場合に準拠します。


    PartialRangeFrom.Iterator

    BoundSendable に準拠し、BoundStrideable に準拠し、また Bound.StrideSignedInteger に準拠する場合に準拠します。


    PartialRangeThrough

    BoundComparable および Sendable に準拠する場合に準拠します。


    PartialRangeUpTo

    BoundComparable および Sendable に準拠する場合に準拠します。


    Range

    BoundComparable および Sendable に準拠する場合に準拠します。


    Repeated

    ElementSendable に準拠する場合に準拠します。


    Result

    SuccessSendable に準拠し、FailureError に準拠する場合に準拠します。


    SIMD16

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD16StorageSendable に準拠する場合に準拠します。


    SIMD2

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD2StorageSendable に準拠する場合に準拠します。


    SIMD3

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD4StorageSendable に準拠する場合に準拠します。


    SIMD32

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD32StorageSendable に準拠する場合に準拠します。


    SIMD4

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD4StorageSendable に準拠する場合に準拠します。


    SIMD64

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD64StorageSendable に準拠する場合に準拠します。


    SIMD8

    ScalarSIMDScalar に準拠し、ScalarSendable に準拠し、また Scalar.SIMD8StorageSendable に準拠する場合に準拠します。


    Set

    ElementHashable および Sendable に準拠する場合に準拠します。


    Set.Index

    ElementHashable および Sendable に準拠する場合に準拠します。


    Set.Iterator

    ElementHashable および Sendable に準拠する場合に準拠します。


    Slice

    BaseCollection に準拠し、BaseSendable に準拠し、Base.IndexSendable に準拠する場合に準拠します。


    StaticBigInt


    StaticString


    StrideThrough

    ElementSendable に準拠し、ElementStrideable に準拠し、また Element.StrideSendable に準拠する場合に準拠します。


    StrideThroughIterator

    ElementSendable に準拠し、ElementStrideable に準拠し、また Element.StrideSendable に準拠する場合に準拠します。


    StrideTo

    ElementSendable に準拠し、ElementStrideable に準拠し、また Element.StrideSendable に準拠する場合に準拠します。


    StrideToIterator

    ElementSendable に準拠し、ElementStrideable に準拠し、また Element.StrideSendable に準拠する場合に準拠します。


    String


    String.Comparator


    String.Encoding

    String.Index


    String.Iterator


    String.LocalizationOptions


    String.LocalizationValue


    String.LocalizationValue.Placeholder


    String.LocalizationValue.StringInterpolation


    String.StandardComparator


    String.UTF16View


    String.UTF16View.Iterator


    String.UTF8View


    String.UnicodeScalarView


    String.UnicodeScalarView.Iterator


    Substring


    Substring.UTF16View


    Substring.UTF8View


    Substring.UnicodeScalarView


    SuspendingClock


    SuspendingClock.Instant


    SystemRandomNumberGenerator


    Task


    TaskGroup

    ChildTaskResultSendable に準拠する場合に準拠します。


    TaskLocal


    TaskPriority


    ThrowingDiscardingTaskGroup

    FailureError に準拠する場合に準拠します。


    ThrowingTaskGroup

    ChildTaskResultSendable に準拠し、FailureError に準拠する場合に準拠します。


    UInt


    UInt.SIMD16Storage


    UInt.SIMD2Storage


    UInt.SIMD32Storage


    UInt.SIMD4Storage


    UInt.SIMD64Storage


    UInt.SIMD8Storage


    UInt.Words


    UInt16


    UInt16.SIMD16Storage


    UInt16.SIMD2Storage


    UInt16.SIMD32Storage


    UInt16.SIMD4Storage


    UInt16.SIMD64Storage


    UInt16.SIMD8Storage


    UInt16.Words


    UInt32


    UInt32.SIMD16Storage


    UInt32.SIMD2Storage


    UInt32.SIMD32Storage


    UInt32.SIMD4Storage


    UInt32.SIMD64Storage


    UInt32.SIMD8Storage


    UInt32.Words


    UInt64


    UInt64.SIMD16Storage


    UInt64.SIMD2Storage


    UInt64.SIMD32Storage


    UInt64.SIMD4Storage


    UInt64.SIMD64Storage


    UInt64.SIMD8Storage


    UInt64.Words


    UInt8


    UInt8.SIMD16Storage


    UInt8.SIMD2Storage


    UInt8.SIMD32Storage


    UInt8.SIMD4Storage


    UInt8.SIMD64Storage


    UInt8.SIMD8Storage


    UInt8.Words


    UnboundedRange_


    Unicode


    Unicode.ASCII


    Unicode.ASCII.Parser


    Unicode.CanonicalCombiningClass


    Unicode.GeneralCategory


    Unicode.NumericType


    Unicode.ParseResult

    TSendableに準拠する場合に準拠します。


    Unicode.Scalar


    Unicode.Scalar.Properties


    Unicode.Scalar.UTF16View


    Unicode.Scalar.UTF8View


    Unicode.UTF16


    Unicode.UTF16.ForwardParser


    Unicode.UTF16.ReverseParser


    Unicode.UTF32


    Unicode.UTF32.Parser


    Unicode.UTF8


    Unicode.UTF8.ForwardParser


    Unicode.UTF8.ReverseParser


    UnicodeDecodingResult


    Unmanaged

    InstanceSendable に準拠する場合に準拠します。


    UnownedJob


    UnownedSerialExecutor


    UnsafeBufferPointer


    UnsafeBufferPointer.Iterator


    UnsafeContinuation


    UnsafeCurrentTask


    UnsafeMutableBufferPointer


    UnsafeMutablePointer


    UnsafeMutableRawBufferPointer


    UnsafeMutableRawPointer


    UnsafePointer


    UnsafeRawBufferPointer


    UnsafeRawBufferPointer.Iterator


    UnsafeRawPointer


    Zip2Sequence

    Sequence1Sendable に準拠し、Sequence1Sequence に準拠し、Sequence2Sendable に準拠し、また Sequence2Sequence に準拠する場合に準拠します。


    Zip2Sequence.Iterator

    Sequence1Sequence に準拠し、Sequence2Sequence に準拠し、Sequence1.IteratorSendable に準拠し、また Sequence2.IteratorSendable に準拠する場合に準拠します。






    以下も見よ


    Actors


    protocol Actor

    すべての Actor (アクター) が準拠する共通プロトコル。


    protocol AnyActor

    (ローカルな) Actor 型と (潜在的にリモートな) DistributedActor 型の両方に共有の "base" を提供する共通のマーカープロトコル。


    class MainActor

    実行部分がメインのディスパッチキューに相当する単独アクター。


    protocol GlobalActor

    プログラム内の任意の場所でさまざまな宣言を分離するために使用できる、グローバル的に一意なアクターを表す型。


    typealias ConcurrentValue   廃止  


    protocol UnsafeSendable

    値をコピーすることで同時実行ドメイン間でその値を安全に渡すことができる型ですが、準拠サイトでの一部の安全性チェックが無効になります。
      廃止  


    typealias UnsafeConcurrentValue   廃止  















    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ