无涯教程-Swift - GET数据

56 阅读3分钟

在本教程的上一部分中,无涯教程安装了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&amp;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">

}

上面的应用程序将在控制台中打印响应,如下所示。

Fetching data through Get request using Alamofire

在这里,结果计数将为50。在这里,无涯教程将使用tableview创建接口构建器以显示此数据。

main.storyboard.

在Storyboard文件中,无涯教程将在UIViewController内添加一个表查看。在原型单元格中,无涯教程将添加图像视图和标签,以分别显示收集艺术家名称,艺术家国家和艺术家名称。无涯教程会将CartableViewCell子类分配给此单元格并创建各个插座。

在Storyboard文件中,无涯教程将在UIViewController内添加一个表视图。在“Prototype”单元内,无涯教程将添加一个图像视图和标签,以分别显示“Collection Artist name”,astist country和artist name。无涯教程将MainTableVIewCell子类分配给此单元格并创建各自的出口。

Fetching data through Get request using Alamofire

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&amp;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">-&gt;</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">&gt;</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 }

}

输出

Fetching data through Get request using Alamofire
点击下载示例

参考链接

www.learnfk.com/ios/ios-fet…