はじめに
上記のリンクを参考にインターネット接続の監視を実装してる際にViewの切り替え時に紫色警告が発生したので対処法を載せておきます。
実装内容
// ネットワーク監視
private func observeNetwork() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
self.isNetwork = true // オンライン
} else {
self.isNetwork = false // オフライン
}
}
monitor.start(queue: queue)
}
import SwiftUI
@main
struct TwitterSearchApp: App {
@ObservedObject private var appViewModel = AppViewModel()
var body: some Scene {
WindowGroup {
if !appViewModel.isNetwork {
OfflineView()
} else {
HomeView()
}
}
}
}
警告文
Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.
DeepL翻訳によるとこんな事を言ってるらしいです。
バックグラウンドスレッドからの変更の発行は許可されていません。モデルの更新時には、必ずメインスレッドから (receive(on:) のような演算子を使って) 値を発行するようにしてください。
解決方法
DispatchQueue.main.async
で囲う事によって解決しました。
// ネットワーク監視
private func observeNetwork() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
DispatchQueue.main.async {
self.isNetwork = true // オンライン
}
} else {
DispatchQueue.main.async {
self.isNetwork = false // オフライン
}
}
}
monitor.start(queue: queue)
}
おわり
紫色警告はレアです