【问题标题】:Swift returning a let valueSwift 返回一个 let 值
【发布时间】:2020-12-10 17:42:00
【问题描述】:

所以我想做的就是能够将 var / let 值返回给 SwiftUI 中的视图。

我目前可以为 JSON 数据执行此操作。但以下不会是 JSON。它只是一个传递和返回的字符串。

nowplaying.swift

let nowplaying: String

class Api {
    func nowPlaying(completion: @escaping ([nowplaying]) -> ()) {
          
                   let nowplaying = "string"
                   DispatchQueue.main.async{
                       // The array is stored under station now
                       completion(nowplaying)
                   }
                   
    
           .resume()
           }
}

podcastView.swift

import SwiftUI

struct Podcasts: View {
    
     let post: Program
    
    @State var nowplaying: [nowplaying] = []
    
    var body: some View {
      
     
            ZStack {
                  Color.blue
               //   Text(post.url)
                  Text(nowplaying)
               
            }
            .onAppear(
            //RUN CODE TO Fetch podcast episodes.
                Api().nowPlaying { (nowplaying) in
                               self.nowplaying = nowplaying
                }
            )
            .navigationBarTitle(Text(post.title), displayMode: .inline)
            .navigationBarHidden(false)
            .navigationBarBackButtonHidden(false)
           
      
        
        
    
    }
        
}


现在我猜测这不起作用的原因是由于这部分

completion: @escaping ([nowplaying]) 

不是 JSON 返回的字符串。所以问题是,如果不返回 JSON 字符串,而是返回文本字符串,我该怎么做?

还有你如何向这个函数发送数据

例如在节点中我会拥有

 func nowPlaying(incomingData, completion: @escaping ([nowplaying]) -> ()) {

                  print(incomingData)

                   let nowplaying = "string"
                   DispatchQueue.main.async{
                       // The array is stored under station now
                       completion(nowplaying)
                   }


           .resume()
           }
}

【问题讨论】:

    标签: swift


    【解决方案1】:

    您的补全需要定义要接收参数的类型,而不是变量。

    func nowPlaying(completion: @escaping (String) -> ()) {
        // ...
    }
    

    你还需要改变你的看法

    @State var nowplaying: String = ""
    

    (它不应该是一个数组,因为您在 Text 视图中使用它)。

    nowplaying.swift 中的第一个 let nowplaying: String 也是无用的。你应该删除它。

    编辑

    一开始没看到,但是:

    .resume() 中的nowPlaying(completion:) 函数与这里无关。只需将其删除。

    在您的Podcasts 视图中,onAppear 是错误的语法。它实际上是在等待关闭,所以你应该使用{ } 而不是( )

    .onAppear {
        // ...
    }
    

    【讨论】:

    • 谢谢 - 我的观点只是得到以下信息:无法将类型 '()' 的值转换为预期的参数类型 '(() -> Void)?'
    • 谢谢你的工作——他们只向那个函数发送数据,并且在向它发送请求时——我需要将数据传递给它。 func nowPlaying(Station... 然后我可以向它发送一个可选字段,例如站名?
    • 您应该查看 Swift 文档以了解所有与语法相关的内容(函数、闭包等)。
    猜你喜欢
    • 2018-10-18
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多