0 UITableViewController में API प्रदर्शित नहीं कर सकता। "[DriverStanding] का कोई सदस्य चालक नहीं है"

पर बनाया गया सवाल Sun, Mar 17, 2019 12:00 AM

मैं सूत्र API से ड्राइवरों की सूची प्रदर्शित करने का प्रयास कर रहा हूं। यह एक UITableViewController पर प्रदर्शित होगा। मैंने प्रोग्राम को UITableView प्रदर्शित किया है लेकिन दुर्भाग्य से, कोई डेटा नहीं है। मुझे जो त्रुटि मिल रही है, वह यह है कि मैं दिए गए नाम और पारिवारिक नाम को UITableViewCell में प्रदर्शित नहीं कर पा रहा हूं। मैं कोडिफ़ प्रोटोकॉल का उपयोग कर रहा हूं जो स्विफ्ट 4 में है। नीचे दिया गया कोड मेरे पास अभी तक है।

struct F1Data: Codable {
    let mrData: MRData

    enum CodingKeys: String, CodingKey {
        case mrData = "MRData"
    }
}

struct MRData: Codable {
    let xmlns: String
    let series: String
    let url: String
    let limit, offset, total: String
    let standingsTable: StandingsTable

    enum CodingKeys: String, CodingKey {
        case xmlns, series, url, limit, offset, total
        case standingsTable = "StandingsTable"
    }
}

struct StandingsTable: Codable {
    let season: String
    let standingsLists: [StandingsList]

    enum CodingKeys: String, CodingKey {
        case season
        case standingsLists = "StandingsLists"
    }
}

struct StandingsList: Codable {
    let season, round: String
    let driverStandings: [DriverStanding]

    enum CodingKeys: String, CodingKey {
        case season, round
        case driverStandings = "DriverStandings"
    }
}

struct DriverStanding: Codable {
    let position, positionText, points, wins: String
    let driver: Driver
    let constructors: [Constructor]

    enum CodingKeys: String, CodingKey {
        case position, positionText, points, wins
        case driver = "Driver"
        case constructors = "Constructors"
    }
}

struct Constructor: Codable {
    let constructorId: String
    let url: String
    let name: String
    let nationality: String
}

struct Driver: Codable {
    let driverId: String
    let url: String
    let givenName, familyName, dateOfBirth, nationality: String
}

class f1TableViewController: UITableViewController {
    var champions = [F1Data]()

    override func viewDidLoad() {
        super.viewDidLoad()
        //        let jsonUrlString = "https://api.letsbuildthatapp.com/jsondecodable/website_description"
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.title = "Champion Drivers"
        fetchJSON()
    }

    private func fetchJSON(){
        let jsonUrlString = "https://ergast.com/api/f1/1999/driverstandings.json"

        guard let url = URL(string: jsonUrlString) else { return }

        URLSession.shared.dataTask(with: url) { (data, response, err) in
            DispatchQueue.main.async {
                if let err = err {
                    print("Failed to get data from url:", err)
                    return
                }

                guard let data = data else { return }
                do {
                    let decoder = JSONDecoder()
                    // Swift 4.1
                    decoder.keyDecodingStrategy = .convertFromSnakeCase
                    self.champions = try decoder.decode([F1Data].self, from: data)
                    self.tableView.reloadData()

                } catch {
                    print(error)
                }
            }
        }.resume()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return champions.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cellId")

        let champion = champions[indexPath.row]
        cell.textLabel?.text = champion.mrData.standingsTable.standingsLists[0].driverStandings.Driver
        //cell.detailTextLabel?.text = String(course.numberOfLessons)
        return cell
    }
}

मुझे पता है कि सरणी के माध्यम से पुनरावृत्ति कैसे करें और कंसोल में डेटा दिखाएं। यह केवल टेबलव्यू में दिखाने की कोशिश कर रहा है।

let season = f1Data.mrData.standingsTable.season
let firstDriver =  f1Data.mrData.standingsTable.standingsLists[0].driverStandings
for driver in firstDriver {
    print("\(driver.driver.givenName) \(driver.driver.familyName)")
}

print(season)
    
0
  1. क्या यह driver के बजाय Driver नहीं होना चाहिए?
    2019-03-17 14: 31: 05Z
  2. अगर मैं driver करता हूं तो मुझे Value of type '[DriverStanding]' has no member 'driver' त्रुटि मिलती है। मूल रूप से `` [DriverStanding] `` `के माध्यम से पुनरावृति कैसे करें?
    2019-03-17 15: 58: 16Z
स्रोत रखा गया यहाँ