【SwiftUI】Map使用時に出てくる紫エラー解消

iOS

SwiftUIでMapの引数coordinateRegionにBinding変数を入れると下記のようなエラーが発生した。

環境はxcode14.2、iOS16.2

Publishing changes from within view updates is not allowed, this will cause undefined behavior.

状況としては別のObservableObjectに準拠したクラス内で定義した@Published変数をMapのcoordinateRegionで使用していました。

ざっくり書くと下記の通り

import SwiftUI
import MapKit

struct map : View {

@EnvironmentObject var hoge : Hoge

    var body: some view {
        Map(coordinateRegion : $hoge.region)
    }
}

class hoge : ObservableOblect {

//Mapで表示する領域
@Published var region : MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 35, longitude: 135),
                                           span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))

}

上記のようなコードだと、$regionのところで冒頭のようなエラーメッセージが発生しました。

調べたところxcode14から同様の事例があるようで、無視しても良かったんですが、このエラーが出たままマップを移動させるとエラーがどんどん増えていきました。

そこで下記のようにコードを改善しました。

import SwiftUI
import MapKit

struct map : View {

@EnvironmentObject var hoge : Hoge

    var body: some view {
//↓.constantを使用
        Map(coordinateRegion : .constant(hoge.region))
    }
}

class hoge : ObservableOblect {

//Mapで表示する領域
@Published var region : MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 35, longitude: 135),
                                           span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))

}

MapのcoordinateRegionに入れる変数を.constant()として代入することでエラーが発生しなくなりました。

この解決法でいいのかわかりませんがとりあえずの解決法としてメモしておきます。

コメント