如何解决Swift返回let值
所以我要做的就是能够将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()
}
}
解决方法
您的完成工作需要定义要接受参数的类型,而不是变量。
func nowPlaying(completion: @escaping (String) -> ()) {
// ...
}
您还需要更改视图
@State var nowplaying: String = ""
(它不应该是数组,因为您在Text
视图中使用它。)
let nowplaying: String
中的第一个nowplaying.swift
也没有用。您应该删除它。
修改
一开始没有看到,但是:
.resume()
函数中的 nowPlaying(completion:)
与此处无关。只需将其删除。
在您的Podcasts
视图中,onAppear
是错误的语法。实际上,它期望关闭,因此您应该使用{ }
而不是( )
:
.onAppear {
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。