使用未解析的标识符'Map' SwiftUI

ktecyv1j  于 2023-10-15  发布在  Swift
关注(0)|答案(3)|浏览(130)

我正在跟踪SwiftUI的official tutorial,遇到了错误消息“使用未解析的标识符'Map'”。即使我从教程中复制并粘贴代码,它仍然会给我错误。我看了一些类似问题的解决方案,似乎找不到任何有用的东西。下面的代码。

import SwiftUI
import MapKit

struct MapView: View {
    @State private var region = MKCoordinateRegion(
        center: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868),
        span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
    )

    var body: some View {
        Map(coordinateRegion: $region)
    }
    }

    struct MapView_Previews: PreviewProvider {
    static var previews: some View {
        MapView()
    }
}

如果这真的很明显,我很抱歉-但我是Swift/SwiftUI的新手,看不出问题来自哪里。提前感谢!

4si2a6ki

4si2a6ki1#

我也在这件事上遇到了麻烦。所以,我使用UIViewRepresentable创建了View方法,其中有两个方法:“makeUIView”和“updateUIView”。

Map视图

import SwiftUI
import MapKit

struct MapViewUI: UIViewRepresentable {
    func makeUIView(context: Context) -> MKMapView {
         MKMapView(frame: .zero)
    }
    func updateUIView(_ view: MKMapView, context: Context) {
            let coordinate = CLLocationCoordinate2D(
                latitude: 2.6540427, longitude: 98.8932576)
            let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
            let region = MKCoordinateRegion(center: coordinate, span: span)
            view.setRegion(region, animated: true)
    }
}

你可以这样调用你的视图

struct MapPageView: View {
    var body: some View {
        VStack {
            MapViewUI()
                .frame(height: 300)
        }
    }
}
sxissh06

sxissh062#

问题与导入MapKit有关。因为Map是在MapKit中定义的。请验证您是否能够正确导入MapKit

mnemlml8

mnemlml83#

我遇到了同样的问题,在这里找到了一个更好的代码示例:
https://github.com/cheukchuen/swiftui-landmarks/blob/main/Landmarks/Views/Helpers/MapView.swift

import SwiftUI
import MapKit

struct MapView: View {
    var coordinate: CLLocationCoordinate2D
    @State private var region = MKCoordinateRegion()

    var body: some View {
        Map(coordinateRegion: $region)
            .onAppear {
                setRegion(coordinate)
            }
    }

    private func setRegion(_ coordinate: CLLocationCoordinate2D) {
        region = MKCoordinateRegion(
            center: coordinate,
            span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
        )
    }
}

struct MapView_Previews: PreviewProvider {
    static var previews: some View {
        MapView(coordinate: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868))
    }
}

它将教程中的“initialPosition”替换为“coordinateRegion”(您也找到了),并添加了. onAppear。
当您稍后使用此视图时,请确保传入坐标参数(这也是本教程的目的)。希望这对你有帮助。

相关问题