iOSアプリケーションのリモートデータを含むテーブルビューを構築しています。私はAlamoFireとSwiftyJSONを使用して、一連のエピソードでJSONファイルを読み込みます。だから私はのviewDidLoadからAlamofireを使用してJSONのURLを使用して画像を読み込む
getEpisodes(url: endpoint)
呼び出す
{
"id": "456",
"name": "EpOne",
"description": "Episode description 1",
"imageURL": "http://myimage.com/myimagefile1.jpg"
},
{
"id": "789",
"name": "Eptwo",
"description": "Episode description 2",
"imageURL": "http://myimage.com/myimagefile2.jpg"
} ...
:
JSONファイルは、次のように構成されています。これは、次のことを実行します:
func getEpisodes(url: String) {
Alamofire.request(url, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
self.buildEpisodeArray(json: json)
case .failure(let error):
print(error)
}
}
}
func buildEpisodeArray(json: JSON) {
if let allEpisodes = json["episodes"].array {
for singleEpisode in allEpisodes {
let currentEpisode = Episode()
currentEpisode.name = singleEpisode["name"].string!
currentEpisode.imageURL = singleEpisode["imageURL"].string!
episodes.append(currentEpisode)
}
}
tableView.reloadData()
}
その後、私はすべてが正常に動作します。この時点で私の細胞
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! EpisodeCell
cell.nameLabel.text = episodes[indexPath.row].name
// TODO Get the image
return cell
}
にデータをロードします。問題は、画像をロードしようとするときです。私はいくつかのチュートリアルをチェックしました(私はこれで少し新しくなりました).Alamofireでデータを取得した後、contentsOf:urlを使って画像を取得します。私の場合、私が代わるので、これは、画像をロードしますが、テーブルビューがメガ遅い
// Get the image
if let url = NSURL(string: episodes[indexPath.row].imageURL),
let data = NSData(contentsOf: url as URL) {
cell.episodeImage.image = UIImage(data: data as Data)
}
で「// TODOは、画像を取得します」。しかし、contentsOf:urlを使用しないと、alamofireでデータをロードする利点がありません(これが私が上下にスクロールするとテーブルが遅いのはなぜかと思います)。
イメージを非同期で読み込んではいけませんか?もしそうなら、それぞれの画像に対して別々のAlamofire.requestを作成しますか?
Alamofireやその他のものでデータをロードするためのチュートリアルがありますが、データを読み込んでロードする場合はどうすればいいですか?
ご協力いただきありがとうございます。
おかげで、素晴らしい仕事しました! :D – cesarcarlos