使用 alamofire 和 swiftyJson 从 UICollectionViewCell 内的 UICollectionView 的 api 中获取数据
Posted
技术标签:
【中文标题】使用 alamofire 和 swiftyJson 从 UICollectionViewCell 内的 UICollectionView 的 api 中获取数据【英文标题】:grab data from api for UICollectionView inside UICollectionViewCell using alamofire and swiftyJson 【发布时间】:2020-02-04 21:48:22 【问题描述】:您好,我正在开发一个用于检索电影数据的应用程序,但我遇到了一个问题,我正在使用 CollectionView 来显示电影类别,并且在这些类别中(在集合视图单元格内)我正在使用另一个集合视图来显示电影根据电影类别,但我无法填充第二个集合视图的单元格,因为它是自定义单元格的子类,我还为自定义单元格创建了一个 xib 文件,我正在尝试实现委托和数据源方法我为自定义单元格制作的类中的第二个集合视图这是我的代码的一部分:
func parseJson(category:MovieCategory)
let currentCategory = category
let parameters = ["api_key":"8460d476d21be7e26a99234d8ca8de51","sort_by":"false","include_video":"false","with_genres":currentCategory.genreID]
Alamofire.request(AppModel().url, method: .get, parameters: parameters).responseJSON (response) in
if response.result.isSuccess
let movieJSON = JSON(response.result.value!)
for i in 0..<20
let title = movieJSON["results"][i]["title"].stringValue
let posterPath = movieJSON["results"][i]["poster_path"].stringValue
let overview = movieJSON["results"][i]["overview"].stringValue
let dateReleased = movieJSON["results"][i]["release_date"].stringValue
let voteAverage = movieJSON["results"][i]["vote_average"].stringValue
print(title)
if let safeImage = AppModel().createImage(posterPath: posterPath)
let movieDetails = MovieDetails(movieTitle: title, poster: safeImage, voteAverage: voteAverage, overview: overview, releaseDate: dateReleased)
currentCategory.categoryMovies.append(movieDetails)
以及我想在哪里使用从 api 检索到的数据:
class CategoryCollectionViewCell:UICollectionViewCell,UICollectionViewDelegate,UICollectionViewDataSource
@IBOutlet weak var sectionName: UILabel!
@IBOutlet weak var movieCollectionView: UICollectionView!
var sectionNumber:Int = 0
let appModel = AppModel()
override func awakeFromNib()
super.awakeFromNib()
movieCollectionView.delegate = self
movieCollectionView.dataSource = self
movieCollectionView.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "cell")
@IBAction func viewAllPressed(_ sender: UIButton)
func numberOfSections(in collectionView: UICollectionView) -> Int
appModel.movieCategories.count
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return appModel.movieCategories[section].categoryMovies.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = movieCollectionView.dequeueReusableCell(withReuseIdentifier: "categoryCell", for: indexPath) as! CollectionViewCell
cell.posterImage.image = appModel.movieCategories[indexPath.section].categoryMovies[indexPath.item].poster
return cell
这些是模型类:
class MovieDetails
let movieTitle:String
let poster:UIImage
let voteAverage:String
let overview:String
let releaseDate:String
init(movieTitle:String,poster:UIImage,voteAverage:String,overview:String,releaseDate:String)
self.movieTitle = movieTitle
self.overview = overview
self.poster = poster
self.releaseDate = releaseDate
self.voteAverage = voteAverage
class MovieCategory
var genreID:String = ""
var categoryTitle:String = ""
var categoryMovies:[MovieDetails] = []
init(genreID:String,categoryTitle:String)
self.genreID = genreID
self.categoryTitle = categoryTitle
我认为我的问题是我不知道在哪里调用 parseJson 侧 CategoryCollectionViewCell 以及在哪里调用 reloadData()。 如果您对此有所了解,请帮助我 谢谢。
【问题讨论】:
【参考方案1】:认为它的工作: 写在你的 alamofire func 中,毕竟 (.success) & (.failure)
self.yourCollectionView.reloadData()
【讨论】:
不,它不起作用我需要一些地方来调用最能完成这项工作的 parseJson,谢谢你帮助我以上是关于使用 alamofire 和 swiftyJson 从 UICollectionViewCell 内的 UICollectionView 的 api 中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
SwiftyJson 和 Alamofire 使用的解码结构
如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON
如何将 RxSwift 与 AlamoFire 和 SwiftyJSON 一起使用?
无法使用“((Any))”类型的参数列表调用“JSON” - 使用 AlamoFire 和 SwiftyJSON