SwiftUI 从视图中传递参数

Posted

技术标签:

【中文标题】SwiftUI 从视图中传递参数【英文标题】:SwiftUI pass param from views 【发布时间】:2019-11-25 21:15:44 【问题描述】:

我有这种情况:

第一个视图,在这个视图中,我得到了当前位置,并将纬度和经度保存在两个双类型变量中:doublelatdoublelng

import SwiftUI

struct CoordinateView: View 

    @ObservedObject var locationManager = LocationManager()

    @State private var gotopage = false

    var userLatitude: String 
        let lat = String(format: "%.6f", locationManager.lastLocation?.coordinate.latitude ?? 0)
        return "\(lat)"
    

    var userLongitude: String 
        let lng = String(format: "%.6f", locationManager.lastLocation?.coordinate.longitude ?? 0)
        return "\(lng)"
    

    var doubleLat : Double 
        return locationManager.lastLocation?.coordinate.latitude ?? 0
    

    var doubleLng : Double 
        return locationManager.lastLocation?.coordinate.longitude ?? 0
    

    private var getcoordinates: Bool 
        if locationManager.statusCode == 0 
            return false
         else 
            return true
        

    

    var body: some View 
        VStack 
            HStack() 
                Text("Your position")
                    .font(.headline)
                Spacer()
            

            VStack(alignment: .leading) 
                HStack()
                    Text("Lat")
                    Spacer()
                    Text("\(userLatitude)")
                .padding(5)

                HStack()
                    Text("Long")
                    Spacer()
                    Text("\(userLongitude)")
                .padding(5)

            

            if getcoordinates 
                HStack(alignment: .center)
                    Button("Go to next page") 
                        self.gotopage = true
                    

                .padding()

                VStack 
                    if self.gotopage 
                        AddressView(latitude: self.doubleLat, longitude: self.doubleLng)
                    
                
            
        
        .padding()
    
;

struct CoordinateView_Previews: PreviewProvider 
    static var previews: some View 
        CoordinateView()
    

现在只需按下按钮Button("Go to next page"),去查看AddressView(latitude: self.doubleLat, longitude: self.doubleLng),有两个参数纬度和经度。

这是地址视图:

import SwiftUI

struct AddressView: View 

    var latitude: Double
    var longitude: Double


    @ObservedObject var apiManager = APIManager(lat: <latitude>, lng: <longitude>)

    var body: some View 

            .....
            .....

    

struct AddressView_Previews: PreviewProvider 
    static var previews: some View 
        AddressView(latitude: 14.564378, longitude: 42.674532)
     

在第二个视图中,我必须在此声明中传递上一个视图中的两个参数(纬度和经度):

@ObservedObject var apiManager = APIManager(lat: <latitude>, lng: <longitude>)

我该怎么办?

谢谢。

【问题讨论】:

您可能需要bind 不适用于绑定 【参考方案1】:

AddressView尝试以下声明

struct AddressView: View 

    var latitude: Double
    var longitude: Double
    @ObservedObject var apiManager: APIManager

    init(latitude: Double, longitude: Double) 
        self.latitude = latitude
        self.longitude = longitude
        self.apiManager = APIManager(lat: latitude, lng: longitude)
    
    ...

【讨论】:

以上是关于SwiftUI 从视图中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 回调作为视图的参数

将变量从 UIHostingController 传递到 SWIFTUI 视图

错误:传递给不带参数 SwiftUI 的调用的参数

SwiftUI:从嵌套视图调用方法

如何从另一个视图swiftui中传递字段文本值

将参数从视图传递到控制器