从 api 检索大量数据并在 UICollectionView Swift 中使用它
Posted
技术标签:
【中文标题】从 api 检索大量数据并在 UICollectionView Swift 中使用它【英文标题】:retrieving a lot of data from api and use it inside UICollectionView Swift 【发布时间】:2020-02-03 19:28:36 【问题描述】:您好,我正在开发一个检索电影数据的应用程序,但我有一些问题,这是我的代码:
let categories = [MovieCategory(generID: "28", categoryTitle: "Action")
,MovieCategory(generID: "16", categoryTitle: "Animation")
,MovieCategory(generID: "35", categoryTitle: "Comedy"),
MovieCategory(generID: "18", categoryTitle: "Drama"),
MovieCategory(generID: "27", categoryTitle: "Horror"),
MovieCategory(generID: "10752", categoryTitle: "War")]
func parseJson( category: MovieCategory)
self.collectionView.reloadData()
var currentCategory = category
let parameters = ["api_key":"8460d476d21be7e26a99234d8ca8de51","sort_by":"false","include_video":"false","with_genres":category.generID]
Alamofire.request(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
if let safeImage = self.createImage(posterPath: posterPath)
let movieDetails = MovieDetails(movieTitle: title, poster: safeImage, voteAverage: voteAverage, overview: overview, releaseDate: dateReleased)
currentCategory.categoryMovies.append(movieDetails)
self.actionMovies.append(UIImage(named: "gul")!)
self.collectionView.reloadData()
我使用两个结构作为数据源,它们是:
struct MovieCategory
let generID:String
let categoryTitle:String
var categoryMovies:[MovieDetails] = []
和:
struct MovieDetails
let movieTitle:String
let poster:UIImage
let voteAverage:String
let overview:String
let releaseDate:String
但是当我想在 category.categoryMovies 中获取数据时,结果是空的,我如何在 parseJson 函数中将数据附加到它我不知道为什么当调用 numberOfItemsInSection 方法时它是空的,它返回类别 [section]。 categoryMovies.count 并且它没有调用 cellForItemAtIndexpath 让我认为它是空的方法。 如果您知道解决方案,我非常感谢您的帮助。
谢谢
【问题讨论】:
你能显示你的资源获取代码的sn-ps吗? 您可能需要换一种方式来思考这个问题。您无法知道下载内容需要多长时间,但您确实知道下载内容的时间。您可能会发现使用 SDWebImage 或 Kingfisher 之类的工具下载图像更容易。他们有方便的方法,可以将占位符图像放入图像视图并在下载完成时替换它。 如果您不想使用外部代码,那么您需要自己实现类似的东西;检查您的图像缓存以查看图像是否可用。如果没有,开始下载并传递一个闭包,当下载完成时更新图像视图URLSessionDownloadDelegate
在这种情况下将是你最好的朋友。发生的情况很可能是您的视图在下载数据之前正在加载。如果您使用下载委托,您可以跟踪下载进度并在下载完成时触发视图更新。
【参考方案1】:
我发现解决方案只是将结构定义为类,因为它们通过引用传递值,它解决了我的问题
【讨论】:
以上是关于从 api 检索大量数据并在 UICollectionView Swift 中使用它的主要内容,如果未能解决你的问题,请参考以下文章
在不重载的情况下将 JSON api 连接到 tableView
从 NSDictionary 中检索数据,并在值周围加上引号?