始めに
iOS16 ~ 17に対応するアプリを開発してると、今まで使っていたonChange
が非推奨になったので16までのonChange
と17からのonChange
で使い分けられるようにしました。
使い分け
extension View {
// MARK: - Methods
@ViewBuilder
func onChangeInteractivelyAvailable<T: Equatable>(_ index: T,
action: @escaping (T?, T) async -> Void
) -> some View {
if #available(iOS 17.0, *) {
// iOS17からのonChange
onChange(of: index) { oldValue, newValue in
Task {
await action(oldValue, newValue)
}
}
} else {
// iOS16までのonChange
onChange(of: index) { newValue in
Task {
await action(nil, newValue)
}
}
}
}
}
以下は、呼び出す時
.onChangeInteractivelyAvailable(hoge) {
print($0) // Optionalなのでnilチェックする(oldValue)
print($1) // newValue
}
まとめ
これで、メソッドを呼べばiOS16 ~ 17でonChange
を使い分けられます。
参考