SwiftUI JSON은 ScrollView HStack에서 제목을 인쇄하지 않습니다 (그러나 List에 있음).
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)
}
}
}
답변
RajatMishra
프로젝트를 정리하고 빌드하십시오. 코드가 잘 작동하는 것 같습니다. 새 프로젝트를 만들고 작성한 위의 코드를 복사하여 붙여 넣으면 올바르게 작동합니다.
수정 됨-목록을 가로로 표시하려면 아래 코드를 사용하세요.
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"))
}