SwiftUI Maps - 不能在属性初始化器中使用实例成员;属性初始化程序在 'self' 可用之前运行
Posted
技术标签:
【中文标题】SwiftUI Maps - 不能在属性初始化器中使用实例成员;属性初始化程序在 \'self\' 可用之前运行【英文标题】:SwiftUI Maps - Cannot use instance member within property initializer; property initializers run before 'self' is availableSwiftUI Maps - 不能在属性初始化器中使用实例成员;属性初始化程序在 'self' 可用之前运行 【发布时间】:2021-12-27 10:29:31 【问题描述】:我正在尝试将 MapKit 的 Map 与 SwiftUI 和动态纬度/经度值一起使用,这些值由导航堆栈上的父视图传递到视图中。 Swift 的所有 MapKit 文档都表明您需要将 @State 与 MKCoordinateRegion
一起使用,但始终将其与恒定的纬度/经度值一起使用。
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
让这个视图按预期编译和工作的最简洁/最新的方法是什么?
编辑:我曾尝试使用初始化程序,但最终出现与分配状态有关的另一个错误:
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'
【问题讨论】:
这能回答你的问题吗? How do I set an @State variable programmatically in SwiftUI 【参考方案1】:我在最后的编辑中很接近,但我需要分配值 _region
- 而不是前缀下划线。看起来这是一个私有设置器,这就是为什么您需要将值包装在 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)
【讨论】:
以上是关于SwiftUI Maps - 不能在属性初始化器中使用实例成员;属性初始化程序在 'self' 可用之前运行的主要内容,如果未能解决你的问题,请参考以下文章
不能在属性初始化器中使用实例成员“pdfName”;属性初始化程序在“自我”可用之前运行