【问题标题】:Request with Alamofire请求 Alamofire
【发布时间】:2019-10-20 18:03:24
【问题描述】:

我从 swift 开始,我试图用 alamofire 列出汽车清单,但它没有带来 代码执行时不会抛出错误,但不会抛出列表 我看到一个空白表格视图

https://uploaddeimagens.com.br/imagens/simulator_screen_shot_-_iphone_8_-_2019-10-20_at_16-48-23-png

(对不起……用写代码编辑)

我的课

struct HotelData: Codable  {
    let results: [Results]
}

struct Results: Codable  {
    let smallDescription: String
    let price: Price
    let gallery: [ImageHotel]
    let name: String
    let address: Address

    var getRandonImage: ImageHotel {
        let index = Int(arc4random_uniform(UInt32(gallery.count)))
        return gallery[index]
    }
}

==============

我的经理

class func getHotels(onComplete: @escaping (HotelData?) -> Void) {
        AF.request(path).responseJSON { (response) in
            guard let jsonData = response.data else { return }
            guard let hotelData = try? JSONDecoder().decode(HotelData.self, from: jsonData)
                else {
                    onComplete(nil)
                    return
            }
            onComplete(hotelData)
            return
        }
    }
}

==============

单元格

func prepareCell(with hotel: Results){
        lbName.text = hotel.name
        lbSmallDescription.text = hotel.smallDescription
        lbPrice.text = "R$ \(hotel.price.amount)"
        lbAdress.text = hotel.address.city
    }

==============

表格视图 类 HotelTableViewController: UITableViewController {

            var hotels: [Results] = []
            let hotelManager = HotelManager()

            override func viewDidLoad() {
                super.viewDidLoad()
                loadHotels()
            }


            override func viewWillAppear(_ animated: Bool) {
                super.viewWillAppear(animated)

            }


            override func numberOfSections(in tableView: UITableView) -> Int {
                return 1
            }


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

            }


            override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! HotelTableViewCell
                let hotel = hotels[indexPath.row]
                cell.prepareCell(with: hotel)
                return cell
                }


            func loadHotels() {
                HotelManager.getHotels { (hotelData) in
                    if let hotelData = hotelData {
                        self.hotels += hotelData.results
                    }
                }
            }

        }

【问题讨论】:

  • 发布您的代码作为问题的一部分,并解释问题所在。
  • 您的 CarData 结构的定义是什么?它不在您上面的代码中。你的确切问题是什么?你不能从互联网上获取数据吗?还是无法解析得到的响应json?
  • 能否请您edit 分享一个重现您的问题的minimal reproducible example?请参阅How to Ask,这表明,帮助他人重现问题...包含足够的代码以允许其他人重现问题。如果可以创建一个可以链接到的问题的实时示例(例如,在sqlfiddle.comjsbin.com 上),那么就这样做 - 但也要将代码复制到问题本身中。跨度>
  • 抱歉,代码已编辑

标签: json swift xcode get alamofire


【解决方案1】:

您的直接问题是,如果您希望 UITableView 查看下载的数据并加载相应的单元格,则需要致电 reloadData()。您可以放入网络调用的完成处理程序,或在 hotels 属性上的 didSet 中。

此外,您不应该将responseJSON 用于Decodable 类型,它是多余的。相反,您应该使用 responseDecodable 并传递您要解析的类型:responseDecodable(of: HotelData.self) { response in ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2018-02-10
    • 2018-07-27
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多