SwiftUI JSON टाइटल स्क्रॉलव्यू HStack में प्रिंट नहीं करेगा (लेकिन सूची में होगा)
मुझे मेरे ContentView.swift फ़ाइल में त्रुटियाँ मिल रही हैं, और जैसा कि मैं सीखने की कोशिश कर रहा हूँ मैं यह नहीं समझ पा रहा हूँ कि त्रुटियाँ क्या कह रही हैं।
मुझे लगता है कि यह टाइप प्रोग्राम के मूल्य को पोस्ट टाइप करने के लिए निर्दिष्ट नहीं कर सकता है लेकिन मैं शीर्षक पाने के लिए कैसे हूं?
मैं इसे 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)
}
}
}
जवाब
कृपया प्रोजेक्ट को साफ करें और उसका निर्माण करें। कोड ठीक काम करने लगता है। मैंने एक नई परियोजना बनाई है और आपने जो ऊपर लिखा है, उसे केवल कॉपी और पेस्ट किया है और यह सही तरीके से काम कर रहा है।
EDITED - सूची को क्षैतिज रूप से दिखाने के लिए, कृपया नीचे दिए गए कोड का उपयोग करें:
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"))
}