// my  url
   //  https://fetch-hiring.s3.amazonaws.com/hiring.json
    /*
    my json 
    [
    {"id": 383, "listId": 4, "name": ""},
    {"id": 472, "listId": 1, "name": ""},
    {"id": 625, "listId": 2, "name": null}
    ]
   */
// my main vc class for table view controller 

import UIKit
class HeadlLinesTableViewController: UITableViewController {
      var parse = [HiringElement]()

    override func viewDidLoad() {

        // Do any additional setup after loading the view.


        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let urlString =  "https://fetch-hiring.s3.amazonaws.com/hiring.json"
        guard let url = URL(string: urlString) else { return }

        // 2
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            if error != nil {
                print(error!.localizedDescription)
            }

            guard let data = data else { return }
            // 3
            //Decode data

            self.Elements = try? JSONDecoder().decode(HiringElement.self, from: data)

            print(data)

            // 4
            //Get back to the main queue
            DispatchQueue.main.async  {
                self.tableView.reloadData()
            }
            // 5
            }.resume() // fires of request

    }

मेरे एपीआई के लिए मेरा मॉडल स्ट्रक्चर यह कुछ ऐसा है जिसे मैंने क्विकटाइपआईओ एपीआई जेनरेटर से इस्तेमाल किया है

struct HiringElement: Codable {
    let id, listID: Int
    let name: String?

    enum CodingKeys: String, CodingKey {
        case id
        case listID
        case name
    }
} typealias Hiring = [HiringElement]

और मेरी टेबल व्यू कंट्रोलर विधि यहाँ मैं डेटा और कुछ त्रुटियों को प्रदर्शित नहीं कर सकता। मैं टेबलव्यू कंट्रोलर का उपयोग कर रहा हूं, इसलिए टेबलव्यू डेलिगेट या डेटासोर्स की जरूरत नहीं है

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        guard let articles = Elements else { return 0 }

        return   return parse.count

    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

            as? newsTableViewCell else {
              fatalError(" cell not found ")  }

        // here I have errors thanks 

           cell.titleLabel.text = parse[indexPath.row].name
    print(cell.titleLabel.text)


        return cell
    }

}

यहाँ मेरा टेबल व्यू सेल क्लास है

import UIKit

class newsTableViewCell: UITableViewCell {
    //var article:Article!
    @IBOutlet weak var avator: UIImageView!
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var newsLabel: UILabel!



    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }


}
-1
Akbar 1 अप्रैल 2020, 01:36

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आपको डिकोडिंग भाग पर काम करना चाहिए। यहाँ एक समाधान है:

struct HiringElement: Decodable {
    let id, listId: Int
    let name: String?
}

@propertyWrapper
struct IgnoreFailure<Value: Decodable>: Decodable {
    var wrappedValue: [Value] = []

    private struct _None: Decodable {}

    init(from decoder: Decoder) throws {
        var container = try decoder.unkeyedContainer()
        while !container.isAtEnd {
            if let decoded = try? container.decode(Value.self) {
                wrappedValue.append(decoded)
            }
            else {
                try? container.decode(_None.self)
            }
        }
    }
}

फिर अपने HeadlLinesTableViewController.swift में निम्न कोड लिखें।

typealias ArrayIgnoringFailure<Value: Decodable> = IgnoreFailure<Value>

फिर डिकोडिंग का प्रयास करें:

guard let objects =  try? JSONDecoder().decode(ArrayIgnoringFailure<HiringElement>.self, from: data)  else { return }
self.elements = objects.wrappedValue

आशा है कि यह आपकी समस्याओं का समाधान करेगा।

1
Rubaiyat Jahan Mumu 1 अप्रैल 2020, 01:37