📘

【Swift6】「Sendable」絡みのエラーと意味

2024/07/09に公開

これまでは何の警告もでなかった以下のような簡単なコード。

struct TestWeatherView: View {
  @State private var text = ""
  private let url = URL(string: "https://wttr.in/?format=3")!

  var body: some View {
    Text(text)
      .task {
        let (data, _) = try! await URLSession.shared.data(from: url)
        text = String(data: data, encoding: .utf8)!
      }
  }
}

警告でますよね。

sc 2024-07-09 at 23.05.01.png

Passing argument of non-sendable type '(any URLSessionTaskDelegate)?' outside of main actor-isolated context may introduce data races

調べると以下。

いわゆる「アクター境界」を越えているので、
data() の返り値は Sendable でなければなりません。

🤔 参考

https://x.com/maochanz/status/1810677730763210801

Discussion