首页 > 解决方案 > 在 .xib 中显示来自 api 的数据不起作用

问题描述

我使用 .xib 文件在单个文件中创建多个UICollectionView/ ,它可以很好地处理虚拟数据。但现在我想将 API 集成到 .nib 中。我面临我执行的问题,但它应该从服务中返回,但它总是返回 0 个bannerImageModel 我无法纠正这个问题,请帮助我UITableviewUIViewControllergetDataForBannerImage()bannerImageModel

class BannerImageStatus: Decodable {
    let status: String
    let error: Bool
    let data: [BannerImageModel]
    init(status: String, error: Bool, data: [BannerImageModel]) {
        self.status = status
        self.error = error
        self.data = data
    }
}

class BannerImageModel: Decodable {
    var id: String
    var name: String
    var image: String
    var url: String
    var status: String
    var created_at: String

    init(id: String, name: String, image: String, url: String, status: String, created_at: String) {
        self.id = id
        self.name = name
        self.image = image
        self.url = url
        self.status = status
        self.created_at = created_at
    }
}  


class BannerImageService {
    var bannerImageModel = [BannerImageModel]()



        func getDataForBannerImage() -> [BannerImageModel]  {
            Alamofire.request("http://abcd/Homeapi/banner/format/json/").responseJSON{ response in
            if let locationJSON = response.result.value as? [String: Any] {
                let data = locationJSON["data"] as! [[String: Any]]
                for dataItem in data {
                    let bannerModel = BannerImageModel(id: dataItem["id"] as! String, name: dataItem["name"] as! String, image: dataItem["image"] as! String, url: dataItem["url"] as! String, status: dataItem["status"] as! String, created_at: dataItem["created_at"] as! String)
                    self.bannerImageModel.append(bannerModel)
                    print(bannerModel.url + bannerModel.image)
                }
            }
        }
        return bannerImageModel
    }

现在,当我从 .xib 类调用服务时,由于这个问题,bannerImageModelArray.count 总是给出 0,我无法调用我的集合视图

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    //bannerImageService.getDataForBannerImage()
    bannerImageModelArray = bannerImageService.getDataForBannerImage()
    print(bannerImageModelArray.count)
    print(bannerImageService.bannerImageModel.count)
        Bundle.main.loadNibNamed("BannerView", owner: self, options: nil)
    self.addSubview(self.view)
    let nibName = UINib(nibName: "BannerCollectionViewCell", bundle: nil)
    bannerCollectionView.register(nibName, forCellWithReuseIdentifier: "BannerCollectionViewCell")
    bannerCollectionView.dataSource = self
    bannerCollectionView.delegate = self
    bannerCollectionView.isUserInteractionEnabled = false
    startTimer()
}  

标签: iosswiftapialamofirexib

解决方案


推荐阅读