如何解决SwiftUI JSON不会在ScrollView HStack中打印标题但会在列表中显示
我在ContentView.swift文件中遇到错误,并且在尝试学习时,我不理解错误在说什么。
我无法将Program类型的值分配给Post类型,但是我要获得标题的意思是什么?
如何在HStack中打印?
import SwiftUI
import RemoteImage
struct ContentView: View {
@State var posts: [Program] = []
var body: some View {
List(posts){ post in
Text("hello")
/*RemoteImage(type: .url(URL(string:post.url)!),errorView: { error in
Text(error.localizedDescription)
},imageView: { image in
image
.resizable()
.aspectRatio(contentMode: .fit)
},loadingView: {
Text("Loading ...")
})*/
// UrlImageView(post.url)
} .onAppear {
Api().getPosts { (posts) in
self.posts = posts
}
}
}
}
import SwiftUI
// Add this top level struct to
// decode properly
struct Post: Codable {
var programs: [Program]
}
struct Program: Codable,Identifiable {
let id = UUID()
var title : String
var icon : String
}
class Api {
// Update this to return an array of Program
func getPosts(completion: @escaping ([Program]) -> ()) {
guard let url = URL(string: "https://api.drn1.com.au/api-access/programs/DRN1") else { return }
URLSession.shared.dataTask(with: url) { (data,_,_) in
// Based on the updated structs,you would no
// longer be decoding an array
let post = try! JSONDecoder().decode(Post.self,from: data!)
dispatchQueue.main.async{
// The array is stored under programs Now
completion(post.programs)
}
}
.resume()
}
}
这也可以,但是不能滚动。
ForEach(posts){ post in
HStack {Text(post.title)}
}.onAppear{
Api().getPosts { (posts) in
self.posts = posts
}
}
要弄清楚我想要得到的最终结果是这个。
ScrollView(.horizontal) {
HStack(spacing: 20) {
ForEach(0..<10) {
Text("Item \($0)")
.foregroundColor(.white)
.font(.largeTitle)
.frame(width: 200,height: 200)
.background(Color.red)
}
}
}
解决方法
请清理并构建项目。该代码似乎正常工作。 我创建了一个新项目,只需复制并粘贴您编写的上述代码即可正常工作。
编辑- 要水平显示列表,请使用以下代码:
var body: some View {
NavigationView {
if posts.isEmpty {
Text("Loading")
} else {
ScrollView(.horizontal,showsIndicators: false) {
HStack(alignment: .center,spacing: 10) {
ForEach(posts) { post in
return Text(post.title)
}
}
}.frame(height: 200)
}
}.onAppear {
Api().getPosts { (posts) in
self.posts = posts
}
}.navigationBarTitle(Text("Home"))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。