在本教程的上一部分中,无涯教程安装了Alamofire并将其设置为向应用程序编程接口(API)发出请求,该接口可在服务器和iOS应用程序之间传输数据。在本部分中,无涯教程将看到如何使用Alamofire通过Get请求获取数据。
GET请求
使用alamofire发出获取请求非常简单。 Alamofire的请求方法用于此目的。语法在下面给出。
Alamofire.request("http://url.com/get").responseJSON{ response
in
print(response.request)
print(response.result)
print(response.response)
</span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">let</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> response</span><span class="pun">.</span><span class="pln">result</span><span class="pun">.</span><span class="kwd">value</span><span class="pun">{</span><span class="pln">
</span><span class="typ">Print</span><span class="pun">(</span><span class="pln">result</span><span class="pun">)</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
使用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 {
</span><span class="kwd">override</span><span class="pln"> func viewDidLoad</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">viewDidLoad</span><span class="pun">()</span><span class="pln">
</span><span class="com">//Do any additional setup after loading the view.</span><span class="pln">
loadJsonData</span><span class="pun">()</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
func loadJsonData</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="typ">Alamofire</span><span class="pun">.</span><span class="pln">request</span><span class="pun">(</span><span class="str">"https://itunes.apple.com/search?media=music&term=bollywood"</span><span class="pun">).</span><span class="pln">responseJSON </span><span class="pun">{</span><span class="pln"> </span><span class="pun">(</span><span class="pln">response</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">in</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Response.result.value \(response.result.value!)"</span><span class="pun">)</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
上面的应用程序将在控制台中打印响应,如下所示。

在这里,结果计数将为50。在这里,无涯教程将使用tableview创建接口构建器以显示此数据。
main.storyboard.
在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!
</span><span class="lit">@IBOutlet</span><span class="pln"> weak </span><span class="kwd">var</span><span class="pln"> artisName</span><span class="pun">:</span><span class="pln"> </span><span class="typ">UILabel</span><span class="pun">!</span><span class="pln">
</span><span class="lit">@IBOutlet</span><span class="pln"> weak </span><span class="kwd">var</span><span class="pln"> artistCountry</span><span class="pun">:</span><span class="pln"> </span><span class="typ">UILabel</span><span class="pun">!</span><span class="pln">
</span><span class="kwd">override</span><span class="pln"> func awakeFromNib</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">awakeFromNib</span><span class="pun">()</span><span class="pln">
</span><span class="com">//初始化代码</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">override</span><span class="pln"> func setSelected</span><span class="pun">(</span><span class="pln">_ selected</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Bool</span><span class="pun">,</span><span class="pln"> animated</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Bool</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">setSelected</span><span class="pun">(</span><span class="pln">selected</span><span class="pun">,</span><span class="pln"> animated</span><span class="pun">:</span><span class="pln"> animated</span><span class="pun">)</span><span class="pln">
</span><span class="com">//为选定状态配置视图</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
ViewController.swift
import UIKit
import Alamofire
class ViewController: UIViewController {
</span><span class="lit">@IBOutlet</span><span class="pln"> weak </span><span class="kwd">var</span><span class="pln"> tableView</span><span class="pun">:</span><span class="pln"> </span><span class="typ">UITableView</span><span class="pun">!</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> artist </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="typ">String</span><span class="pun">:</span><span class="typ">Any</span><span class="pun">]]()</span><span class="pln">
</span><span class="kwd">override</span><span class="pln"> func viewDidLoad</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">viewDidLoad</span><span class="pun">()</span><span class="pln">
</span><span class="com">//Do any additional setup after loading the view.</span><span class="pln">
loadJsonData</span><span class="pun">()</span><span class="pln">
tableView</span><span class="pun">.</span><span class="kwd">delegate</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">self</span><span class="pln">
tableView</span><span class="pun">.</span><span class="pln">dataSource </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">self</span><span class="pln">
</span><span class="com">//tableView.rowHeight = UITableView.automaticDimension</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
func loadJsonData</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="typ">Alamofire</span><span class="pun">.</span><span class="pln">request</span><span class="pun">(</span><span class="str">"https://itunes.apple.com/search?media=music&term=bollywood"</span><span class="pun">).</span><span class="pln">responseJSON </span><span class="pun">{</span><span class="pln"> </span><span class="pun">(</span><span class="pln">response</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">in</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Response value \(response)"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Response.result.value \(response.result.value!)"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">let</span><span class="pln"> json </span><span class="pun">=</span><span class="pln"> response</span><span class="pun">.</span><span class="pln">result</span><span class="pun">.</span><span class="kwd">value</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="pun">[</span><span class="typ">String</span><span class="pun">:</span><span class="typ">Any</span><span class="pun">]?{</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">let</span><span class="pln"> responseValue </span><span class="pun">=</span><span class="pln"> json</span><span class="pun">[</span><span class="str">"results"</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="pun">[[</span><span class="typ">String</span><span class="pun">:</span><span class="typ">Any</span><span class="pun">]]?{</span><span class="pln">
</span><span class="kwd">self</span><span class="pun">.</span><span class="pln">artist </span><span class="pun">=</span><span class="pln"> responseValue
</span><span class="kwd">self</span><span class="pun">.</span><span class="pln">tableView</span><span class="pun">.</span><span class="pln">reloadData</span><span class="pun">()</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
extension ViewController : UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return artist.count
}
func tableView</span><span class="pun">(</span><span class="pln">_ tableView</span><span class="pun">:</span><span class="pln"> </span><span class="typ">UITableView</span><span class="pun">,</span><span class="pln"> cellForRowAt indexPath</span><span class="pun">:</span><span class="pln"> </span><span class="typ">IndexPath</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-></span><span class="pln"> </span><span class="typ">UITableViewCell</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">let</span><span class="pln"> cell </span><span class="pun">=</span><span class="pln"> tableView</span><span class="pun">.</span><span class="pln">dequeueReusableCell</span><span class="pun">(</span><span class="pln">withIdentifier</span><span class="pun">:</span><span class="pln"> </span><span class="str">"MainTableViewCell"</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="typ">MainTableViewCell</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">artist</span><span class="pun">.</span><span class="pln">count </span><span class="pun">></span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
</span><span class="kwd">do</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">let</span><span class="pln"> artistData </span><span class="pun">=</span><span class="pln"> artist</span><span class="pun">[</span><span class="pln">indexPath</span><span class="pun">.</span><span class="pln">row</span><span class="pun">]</span><span class="pln">
cell</span><span class="pun">.</span><span class="pln">artistImgView</span><span class="pun">.</span><span class="pln">image </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">try</span><span class="pln"> </span><span class="typ">UIImage</span><span class="pun">(</span><span class="pln">data</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Data</span><span class="pun">(</span><span class="pln">contentsOf</span><span class="pun">:</span><span class="pln"> URL</span><span class="pun">(</span><span class="kwd">string</span><span class="pun">:</span><span class="pln"> artistData</span><span class="pun">[</span><span class="str">"artworkUrl60"</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="typ">String</span><span class="pun">)</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> URL</span><span class="pun">(</span><span class="kwd">string</span><span class="pun">:</span><span class="pln"> </span><span class="str">"http://www.google.com"</span><span class="pun">)!))</span><span class="pln">
cell</span><span class="pun">.</span><span class="pln">trackName</span><span class="pun">.</span><span class="pln">text </span><span class="pun">=</span><span class="pln"> artistData</span><span class="pun">[</span><span class="str">"trackName"</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="typ">String</span><span class="pln">
cell</span><span class="pun">.</span><span class="pln">artisName</span><span class="pun">.</span><span class="pln">text </span><span class="pun">=</span><span class="pln"> artistData</span><span class="pun">[</span><span class="str">"artistName"</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="typ">String</span><span class="pln">
cell</span><span class="pun">.</span><span class="pln">artistCountry</span><span class="pun">.</span><span class="pln">text </span><span class="pun">=</span><span class="pln"> artistData</span><span class="pun">[</span><span class="str">"country"</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">as</span><span class="pun">!</span><span class="pln"> </span><span class="typ">String</span><span class="pln">
</span><span class="pun">}</span><span class="kwd">catch</span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> cell
</span><span class="pun">}</span><span class="pln">
}
extension ViewController : UITableViewDelegate{
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 220
}
}
输出
