使用swift进行API调用
说到iOS编码,我完全是个笨蛋。 我正在尝试学习如何对“”进行API调用 然而,由于我是一个彻头彻尾的傻瓜,我发现所有的教程对于如何做都毫无意义。 我想学习的是如何从web获取JSON数据并将其输入UITableViewCell 我已经看了大约3打教程,没有什么是有意义的 感谢您的帮助。让我们一步一步来: 1) 用于进行api调用的框架是NSURLSession(或一些库,如Alomofire等) 进行api调用的示例如下:使用swift进行API调用,swift,api,Swift,Api,说到iOS编码,我完全是个笨蛋。 我正在尝试学习如何对“”进行API调用 然而,由于我是一个彻头彻尾的傻瓜,我发现所有的教程对于如何做都毫无意义。 我想学习的是如何从web获取JSON数据并将其输入UITableViewCell 我已经看了大约3打教程,没有什么是有意义的 感谢您的帮助。让我们一步一步来: 1) 用于进行api调用的框架是NSURLSession(或一些库,如Alomofire等) 进行api调用的示例如下: func getBooksData(){ let url =
func getBooksData(){
let url = "http://de-coding-test.s3.amazonaws.com/books.json"
(NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
//Here we're converting the JSON to an NSArray
if let jsonData = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableLeaves)) as? NSArray{
//Create a local variable to save the data that we receive
var results:[Book] = []
for bookDict in jsonData where bookDict is NSDictionary{
//Create book objects and add to the array of results
let book = Book.objectWithDictionary(bookDict as! NSDictionary)
results.append(book)
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//Make a call to the UI on the main queue
self.books = results
self.tblBooks.reloadData()
})
}
}).resume()
}
账簿实体:
class Book{
var title:String
init(title:String){
self.title = title
}
class func objectWithDictionary(dict:NSDictionary)->Book{
var title = ""
if let titleTmp = dict.objectForKey("title") as? String{
title = titleTmp
}
return Book(title: title)
}
}
注意:在实践中,您将检查响应的错误和状态代码,还可以提取对另一个类(或服务层)进行api调用的代码。一个选项是,使用DataMapper模式,您可以按实体创建一个类管理器(在本例中为book-like BookManager),您可以这样做(您可以通过创建一个通用api,从JSON转换中接收url并返回AnyObject,然后从管理器中的流程中提取更多内容):
您希望我们回答什么?请尝试此库并检查示例:
class BookManager{
let sharedInstance:BookManager = BookManager()
private init(){}
func getBookData(success:([Book])->Void,failure:(String)->Void){
let url = "http://de-coding-test.s3.amazonaws.com/books.json"
(NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
if error != nil{
failure(error!.localizedDescription)
}else{
if let jsonData = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableLeaves)) as? NSArray{
var results:[Book] = []
for bookDict in jsonData where bookDict is NSDictionary{
let book = Book.objectWithDictionary(bookDict as! NSDictionary)
results.append(book)
}
success(results)
}else{
failure("Error Format")
}
}
}).resume()
}
}