在本教程的上一部分中,无涯教程安装了Alamofire并将其设置为向应用程序编程接口(API)发出请求,该接口可在服务器和iOS应用程序之间传输数据。在本部分中,无涯教程将看到如何使用Alamofire通过Get请求获取数据。
使用alamofire发出获取请求非常简单。 Alamofire的请求方法用于此目的。语法在下面给出。
Alamofire.request("http://url.com/get").responseJSON{ response in print(response.request) print(response.result) print(response.response) if let result = response.result.value{ Print(result) } }
使用Alamofire的获取请求时,无涯教程只需要拥有API URL。关于成功,无涯教程获得了一个响应对象,使用无涯教程可以获得响应结果值,可以在无涯教程的响应模型中解析。
在此示例中,无涯教程将使用Apple虚拟API URL https://itunes.apple.com/search?media=music&term=bollywood。在这里,无涯教程将创建一个应用程序,其中包含一个动态表视图,以向用户显示API数据。在此应用程序中,无涯教程将向API发出get请求,然后将API数据填充到tableview中。
请按照上一章中给出的步骤在应用程序中安装Alamofire并打开xcworkspace文件。创建一个MainViewController类,并发出获取请求以使用Alamofire打印API数据。
mainViewController.swift.
import UIKit import Alamofire class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //Do any additional setup after loading the view. loadJsonData() } func loadJsonData() { Alamofire.request("https://itunes.apple.com/search?media=music&term=bollywood").responseJSON { (response) in print("Response.result.value \(response.result.value!)") } } }
上面的应用程序将在控制台中打印响应,如下所示。
在这里,结果计数将为50。在这里,无涯教程将使用tableview创建接口构建器以显示此数据。
在Storyboard文件中,无涯教程将在UIViewController内添加一个表查看。在原型单元格中,无涯教程将添加图像视图和标签,以分别显示收集艺术家名称,艺术家国家和艺术家名称。无涯教程会将CartableViewCell子类分配给此单元格并创建各个插座。
在Storyboard文件中,无涯教程将在UIViewController内添加一个表视图。在“Prototype”单元内,无涯教程将添加一个图像视图和标签,以分别显示“Collection Artist name”,astist country和artist name。无涯教程将MainTableVIewCell子类分配给此单元格并创建各自的出口。
MainTableViewCell.swift
import UIKit class MainTableViewCell: UITableViewCell { @IBOutlet weak var trackName: UILabel! @IBOutlet weak var artistImgView: UIImageView! @IBOutlet weak var artisName: UILabel! @IBOutlet weak var artistCountry: UILabel! override func awakeFromNib() { super.awakeFromNib() //初始化代码 } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) //为选定状态配置视图 } }
ViewController.swift
import UIKit import Alamofire class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var artist = [[String:Any]]() override func viewDidLoad() { super.viewDidLoad() //Do any additional setup after loading the view. loadJsonData() tableView.delegate = self tableView.dataSource = self //tableView.rowHeight = UITableView.automaticDimension } func loadJsonData() { Alamofire.request("https://itunes.apple.com/search?media=music&term=bollywood").responseJSON { (response) in print("Response value \(response)") print("Response.result.value \(response.result.value!)") if let json = response.result.value as! [String:Any]?{ if let responseValue = json["results"] as! [[String:Any]]?{ self.artist = responseValue self.tableView.reloadData() } } } } } extension ViewController : UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return artist.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MainTableViewCell") as! MainTableViewCell if(artist.count > 0){ do{ let artistData = artist[indexPath.row] cell.artistImgView.image = try UIImage(data: Data(contentsOf: URL(string: artistData["artworkUrl60"] as! String) ?? URL(string: "http://www.google.com")!)) cell.trackName.text = artistData["trackName"] as! String cell.artisName.text = artistData["artistName"] as! String cell.artistCountry.text = artistData["country"] as! String }catch{ } } return cell } } extension ViewController : UITableViewDelegate{ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 220 } }
输出
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)