SwiftUI JSON टाइटल स्क्रॉलव्यू HStack में प्रिंट नहीं करेगा (लेकिन सूची में होगा)

Aug 17 2020

मुझे मेरे 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)
        }
    }
}

जवाब

RajatMishra Aug 18 2020 at 09:31

कृपया प्रोजेक्ट को साफ करें और उसका निर्माण करें। कोड ठीक काम करने लगता है। मैंने एक नई परियोजना बनाई है और आपने जो ऊपर लिखा है, उसे केवल कॉपी और पेस्ट किया है और यह सही तरीके से काम कर रहा है।

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"))
}