SwiftUI 地图 - 无法在 属性 初始值设定项中使用实例成员; 属性 初始值设定项 运行 在 'self' 可用之前
SwiftUI Maps - Cannot use instance member within property initializer; property initializers run before 'self' is available
我正在尝试将 MapKit 的地图与 SwiftUI 和动态 latitude/longitude 值一起使用,这些值由导航堆栈上的父视图传递到视图中。 Swift 的所有 MapKit 文档都表明您需要将 @State 与 MKCoordinateRegion
一起使用,但始终将其与常量 latitude/longitude 值一起使用。
struct PlaceDetail: View {
let place: Place
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: place.latitude, longitude: place.longitude),
latitudinalMeters: 750,
longitudinalMeters: 750
)
var body: some View {
Map(coordinateRegion: region)
}
}
我希望能够通过父视图传入的 place
对象提供的 latitude
/longitude
值动态地使用它。上面的代码导致编译器错误:
Cannot use instance member 'place' within property initializer; property initializers run before 'self' is available
使此视图按预期编译和工作的 cleanest/most 更新方法是什么?
编辑:我曾尝试使用初始化程序,但最终遇到了另一个与针对状态分配相关的错误:
struct PlaceDetail: View {
let place: Place
@State var region: MKCoordinateRegion
init(place: Place) {
self.place = place
let region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: place.latitude, longitude: place.longitude),
latitudinalMeters: 750,
longitudinalMeters: 750
)
self.region = State(initialValue: region)
}
var body: some View {
Map(coordinateRegion: $region)
}
}
结果:
Cannot assign value of type 'State<MKCoordinateRegion>' to type 'MKCoordinateRegion'
我在最后的编辑中接近了,但我需要分配值 _region
- 而不是带前缀的下划线。看起来这是一个私有 setter,这就是为什么您需要将值包装在 State
中。并且不要忘记使用 $
前缀在视图中使用实例变量。
struct PlaceDetail: View {
let place: Place
@State var region: MKCoordinateRegion
init(place: Place) {
self.place = place
let region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: place.latitude, longitude: place.longitude),
latitudinalMeters: 750,
longitudinalMeters: 750
)
self._region = State(initialValue: region)
}
var body: some View {
Map(coordinateRegion: $region)
}
}
我正在尝试将 MapKit 的地图与 SwiftUI 和动态 latitude/longitude 值一起使用,这些值由导航堆栈上的父视图传递到视图中。 Swift 的所有 MapKit 文档都表明您需要将 @State 与 MKCoordinateRegion
一起使用,但始终将其与常量 latitude/longitude 值一起使用。
struct PlaceDetail: View {
let place: Place
@State private var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: place.latitude, longitude: place.longitude),
latitudinalMeters: 750,
longitudinalMeters: 750
)
var body: some View {
Map(coordinateRegion: region)
}
}
我希望能够通过父视图传入的 place
对象提供的 latitude
/longitude
值动态地使用它。上面的代码导致编译器错误:
Cannot use instance member 'place' within property initializer; property initializers run before 'self' is available
使此视图按预期编译和工作的 cleanest/most 更新方法是什么?
编辑:我曾尝试使用初始化程序,但最终遇到了另一个与针对状态分配相关的错误:
struct PlaceDetail: View {
let place: Place
@State var region: MKCoordinateRegion
init(place: Place) {
self.place = place
let region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: place.latitude, longitude: place.longitude),
latitudinalMeters: 750,
longitudinalMeters: 750
)
self.region = State(initialValue: region)
}
var body: some View {
Map(coordinateRegion: $region)
}
}
结果:
Cannot assign value of type 'State<MKCoordinateRegion>' to type 'MKCoordinateRegion'
我在最后的编辑中接近了,但我需要分配值 _region
- 而不是带前缀的下划线。看起来这是一个私有 setter,这就是为什么您需要将值包装在 State
中。并且不要忘记使用 $
前缀在视图中使用实例变量。
struct PlaceDetail: View {
let place: Place
@State var region: MKCoordinateRegion
init(place: Place) {
self.place = place
let region = MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: place.latitude, longitude: place.longitude),
latitudinalMeters: 750,
longitudinalMeters: 750
)
self._region = State(initialValue: region)
}
var body: some View {
Map(coordinateRegion: $region)
}
}