Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用swift进行API调用_Swift_Api - Fatal编程技术网

使用swift进行API调用

使用swift进行API调用,swift,api,Swift,Api,说到iOS编码,我完全是个笨蛋。 我正在尝试学习如何对“”进行API调用 然而,由于我是一个彻头彻尾的傻瓜,我发现所有的教程对于如何做都毫无意义。 我想学习的是如何从web获取JSON数据并将其输入UITableViewCell 我已经看了大约3打教程,没有什么是有意义的 感谢您的帮助。让我们一步一步来: 1) 用于进行api调用的框架是NSURLSession(或一些库,如Alomofire等) 进行api调用的示例如下: func getBooksData(){ let url =

说到iOS编码,我完全是个笨蛋。 我正在尝试学习如何对“”进行API调用 然而,由于我是一个彻头彻尾的傻瓜,我发现所有的教程对于如何做都毫无意义。 我想学习的是如何从web获取JSON数据并将其输入UITableViewCell

我已经看了大约3打教程,没有什么是有意义的

感谢您的帮助。

让我们一步一步来:

1) 用于进行api调用的框架是NSURLSession(或一些库,如Alomofire等)

进行api调用的示例如下:

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()

    }

}