将数据发送到下一个视图 - SwiftUI

Posted

技术标签:

【中文标题】将数据发送到下一个视图 - SwiftUI【英文标题】:Send data to next view - SwiftUI 【发布时间】:2020-08-19 06:18:55 【问题描述】:

所以我一直在尝试使用 SwiftUI 获得简单的数据传递。

基本上,下面的脚本会打印出一个项目列表(在 HStack 中),然后我将每个项目链接到我们的 Podcast() 视图。

我要做的是将播客名称传递到下一个视图。我如何实现 这?因为所有的例子都是关于 int 的,我没有使用我使用的字符串。

import SwiftUI
import RemoteImage

struct ContentView: View 

    @State private var showAlert = false
    @State var posts: [Program] = []

   var body: some View 
        NavigationView 
            if posts.isEmpty 
                Text("Loading")
             else 
                ScrollView(.horizontal, showsIndicators: false) 
                    HStack(alignment: .bottom, spacing: 10) 
                        ForEach(posts)  post in
                            //return
                            NavigationLink(destination: Podcasts())
                            RemoteImage(type: .url(URL(string:post.icon)!), errorView:  error in
                                Text(error.localizedDescription)
                            , imageView:  image in
                                image
                                .resizable()
                                .renderingMode(.original)
/*                                .clipShape(Circle())
                                .shadow(radius: 10)
                                .overlay(Circle().stroke(Color.red, lineWidth: 5))*/
                                .aspectRatio(contentMode: .fit)
                                .frame(width:200, height:200)
                            , loadingView: 
                                Text("Loading ...")
                            )
                            
                        
                    .frame(height: 200)
                .frame(height: 200)
            
        .onAppear 
            Api().getPosts  (posts) in
                self.posts = posts
            
        .navigationBarTitle(Text("Home"))
    




struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

播客视图

import SwiftUI

struct Podcasts: View 
    
 
    var body: some View 
      
        NavigationView
            Text("Hello")
        .navigationBarTitle(Text("Podcast"))
    
    
        



struct Podcasts_Previews: PreviewProvider 
    static var previews: some View 
        Podcasts()
    

【问题讨论】:

【参考方案1】:

将 post 作为构造函数参数传递,例如

ForEach(posts)  post in
    //return
    NavigationLink(destination: Podcasts(post: post))

现在

struct Podcasts: View 
    let post: Program
 
    var body: some View 

        // !! DON'T ADD SECOND NAVIGATION VIEW IN STACK 
        // !! - THERE MUST BE ONLY ONE

        Text(post.name)
           .navigationBarTitle(Text("Podcast"))
    

【讨论】:

但这给了我一个错误参数传递给在 navigationLink 上不接受任何参数的调用 - 我确实尝试过,但一直收到错误。 使用 Xcode 11.4 / ios 13.4 测试。可能是你在适应你的代码时遗漏了什么,或者没有提供一些代码。

以上是关于将数据发送到下一个视图 - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 如何根据获取的数据更改视图的背景颜色?

SwiftUI 发送按钮点击到子视图

使用当前模态将数据从一个 uiviewcontroller 发送到另一个 navigationcontroller

不将数据发送到下一个活动,而是发送到之后的活动(使用 parcelable)

单击表格单元格时将变量值发送到下一个视图控制器

将信息发送到另一个视图控制器