我是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
}
答案 0 :(得分:0)
查看有关@State
的文档时,您会发现以下片段:
仅从视图主体内部(或从视图主体内部)访问状态属性 它调用的函数)。因此,您应该声明您的 将属性设置为私有,以防止您的视图的客户 访问它。
因此,不应在初始化程序中设置坐标,位置或mapArray,如果发现有必要在初始化程序中设置变量,则应将其声明为@Binding
或@ObservedObject