init方法中的简单分配操作不起作用swiftui

时间:2019-12-18 14:31:39

标签: mapkit swiftui init swift5 modal-view

我是iOS的新手,现在尝试在swiftui视图中实现自己的init方法。初始化有一个参数,必须将值赋给两个状态。但是,无论我做什么,它都无法正确填充它们。我使用MapKit和CLLocationCoordinate2D进行地理位置定位。 仅添加坐标:init中的CLLocationCoordinate2D具有正确的值,但状态没有。 我在这里实现的视图是ModalView 知道该怎么办吗?这是我的代码。


    @State var coordinate = CLLocationCoordinate2D()
    @State private var name: String = ""
    @State private var price: Decimal = 0
    @State private var priceStr: String = ""
    @State private var showAlert = false
    @State private var location = ParkPlaceRespons(id: -1, name: "", price: -0, longitude: 18.42645, latitude: 43.85623)
    @State private var mapArray = [ParkPlaceRespons]()

    var alert: Alert{
        Alert(title: Text("Error"), message: Text("Your price input is not in right format"), dismissButton: .default(Text("Ok")))}

    init(coordinates: CLLocationCoordinate2D){
        print(coordinates)    // CLLocationCoordinate2D(latitude: 43.85613, longitude: 18.42745)
        self.coordinate = coordinates
        print(self.coordinate)   // CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0)
        self.coordinate.latitude = coordinates.latitude
        self.coordinate.longitude = coordinates.longitude
        self.location.longitude = coordinates.longitude
        self.location.latitude = coordinates.latitude
        print(location)  // Does not work as well
        self.mapArray.append(location)
        print(mapArray)   // Empty array
    }

1 个答案:

答案 0 :(得分:0)

查看有关@State的文档时,您会发现以下片段:

  

仅从视图主体内部(或从视图主体内部)访问状态属性   它调用的函数)。因此,您应该声明您的   将属性设置为私有,以防止您的视图的客户   访问它。

因此,不应在初始化程序中设置坐标,位置或mapArray,如果发现有必要在初始化程序中设置变量,则应将其声明为@Binding@ObservedObject