Open15

Swift 6

ykwsykws

データ競合を防ぐためにデータ隔離を行う

Isolation は Compose でもよく出てくる共通の課題

ykwsykws

Isolation が暗黙的に宣言されるのがわかりにくい原因かも
4種類に分類できる

  • cloure(nonisolated)
  • typed isolated
  • parameter isolated
  • captured value isolated
ykwsykws

Swift6 ではデータ共有するようなプログラムに Actor を利用しないとそもそもビルドできない

ykwsykws

Strict Concurrency
Objc -> Swift Optional と似ている ヌルポがなくなる
マルチスレッドのクラッシュが排除できる

forcedUnwrapped で実行時エラーが出ないならコンパイラを黙らせるような挙動も同じような感覚になるはず

全てを修正するのが理想だが、実行時に問題ないことを検査できていれば妥協は可能

ykwsykws

スレッド起因の原因不明な BAD ACCESS, SIG ABORT は Strict Swift Concurrency で解消される可能性はある

ykwsykws

Isolation Boundary
隔離境界を超えているかどうか
iOS アプリでは MainActor にとどまるのであまり問題ならないユースケースが多いのでは

不必要に MainActor で処理している部分はないか?

ykwsykws

runtime で UIKit をメインスレッド以外が触っている紫の警告がコンパイル時にできるようになる

ykwsykws

actor を採用すると Sendable の適用、 suspention point を挟むので状態がその前後で変わる可能性があって、条件判定していたら、二重チェックが必要になる

ykwsykws

Xcode 16 では Swift 6, 5 の切り替えが可能なので猶予はある
Swift 5 Complete Strict Concurrency が対応できれば、 Swift 6 に移行できる