2

Swift 言語のアクター モデルの提案書 (こちら) では、アクター間で非 Sendable 型を返す関数を呼び出すことは許可されていません。

ただし、論文の例を試してみたところ、エラーが発生すると思われるときにコンパイルして実行できます。

class Person: CustomStringConvertible {
  var name: String = ""

  var description: String {
    return "Person name: \(name)"
  }
}

actor BankAccount {
  var owners: [Person] = [Person()]

  func primaryOwner() -> Person? {
    return owners.first
  }
}

@main
struct EntryPoint {
  static func main() async {
    let account = BankAccount()
    if let owner = await account.primaryOwner() {
      owner.name = "FooBar" // Change actor's mutable state outside of actor-isolated context
    }
    print(await account.owners)
  }
}

// Output: [Person name: FooBar]

私のSwiftバージョン

$ swift --version
Swift version 5.5.1 (swift-5.5.1-RELEASE)
Target: x86_64-unknown-linux-gnu

上記のコードで何か間違ったことをしましたか? 私が正しく行った場合、実装が提案書に準拠していないのはなぜですか?

ありがとう。

4

0 に答える 0