Swift 網絡請求數據與解析

一: Swift 網絡數據請求與處理最經常使用第三方 html

    又有時間出來裝天才了,仍是在學swift,從中又發現一些問題,這兩天上網找博客看問題弄的真的心都累。博客一篇寫出來,好多就直接照抄,就沒有實質性的把問題解決了,只是在發表的博客數量上 + 1 !!真心沒意思。。ios

    看看在Swift中是在怎樣請求數據,解析數據加載圖片這些的,也使咱們最基本最多見的用法了,先說說這幾個三方庫: git

    第一個: Alamofire  (它的原做者就是AFNetworking的原做者,這個就很少說了,你要知道AFNetworking有多重要,多好用,它就有多重要好用!)github

    Git地址:https://github.com/Alamofire/Alamofirejson

    第二個: SwiftyJSON  一個解析JSON數據的三方庫,使用swift寫的,中間幫你省去swift的各類可選值的操做,很簡便(推薦!)swift

    Git地址:  https://github.com/SwiftyJSON/SwiftyJSONapi

    第三個: Kingfisher   (一個圖片加載的國產庫。重點是國產的的支持!)網絡

    Git地址:https://github.com/onevcat/Kingfisher/releasesapp

    說說他們導入時候的問題,其實三方咱們用的時候,可能導入的時候會有問題,能用的反倒不會說不會用怎樣,導入時候的問題各類各樣,五花八門的!比起那些手動導入三方的我真的是你強烈建議推薦  Cocoapods ! 它的安裝使用在前面個人博客裏面有些過,是最新安裝的方法,個人也是不久前安裝的,有須要的能夠去看一下:地址--->  http://www.cnblogs.com/taoxu/p/4964395.htmlide

   而後呢,再給你們一個建議,導入時候多去 Git 上面看看原做者的詳細的導入過程,以及可能會出現的一下問題!在導入的過程當中,必定要注意你本身工程的最低版本要求和三方庫的最高版本要求之間的差別,這個很容易忽略致使錯誤!我把本身的 cocoapods 的終端輸入命令展現出來,確保是沒問題,可行的!我寫的例子項目最低版本是 8.0 。

platform :ios, '9.0'
use_frameworks!
pod 'Alamofire', '~> 3.3'

platform :ios, '9.0'
use_frameworks!
pod 'SwiftyJSON','~> 2.3.1'

platform :ios, '8.0'
use_frameworks!
pod 'Kingfisher', '~> 2.4'

      若是導入有問題,好好上網去找一下問題所在的地方,你不斷地堅持嘗試和探索的過程原本就是一個在學習的過程,建議你必定要搞清楚要知道你作的每一步是什麼意義,你修改嘗試的每一個地方表明着什麼意思!儘可能別作一個我知道那樣能夠,但我不知道爲何的孩紙哈!!仍是給整個文件代碼給你們看,完成清晰點!

二:完整代碼示例用法

import UIKit
import Alamofire
import SwiftyJSON
import Kingfisher

// 至關於數據模型model
class itemsModel: NSObject {
    
    var cover_image_url = ""
    var title  = ""
    var likecount = ""
    
}

class giftSaycontroller: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
    @IBOutlet weak var gifttableview: UITableView!
   
    // 數據源
    var dataArray = [itemsModel]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        gifttableview.delegate = self
        gifttableview.dataSource = self
        
        self.DownLoadData()
        
        // Do any additional setup after loading the view.
  
    }
    
    // MARK: 下載解析數據
    func DownLoadData() -> Void {
       
        Alamofire.request(.GET, "http://api.liwushuo.com/v2/channels/104/items?ad=2&gender=2&generation=2&limit=20&offset=0").responseJSON {
            (response)   in
            
            // 有錯誤就打印錯誤,沒有就解析數據
            if let Error = response.result.error
            {
               print(Error)
            }
            else if let jsonresult = response.result.value {
                // 用 SwiftyJSON 解析數據
                let JSOnDictory = JSON(jsonresult )
                let data =  JSOnDictory["data"]["items"].array
                for dataDic in  data!
                {
                    
                    let model =  itemsModel()
                    //  ?? 這個符號,我怕有初學者忘記了的提醒一下,A ?? B  這是一個 NIL合併運算符,它的做用是若是 A 不是NIL 就返回前面可選類型參數 A 的肯定值, 若是 A 是NIL 就返回後面 B 的值!A和B之間類型的注意點我就不說了,忘記了去看書,,哈哈哈

                    model.cover_image_url = dataDic["cover_image_url"].string ?? ""
                    model.title =  dataDic["title"].string ?? ""

                    let  numString = String(format:"%d",dataDic["likes_count"].intValue ?? 0)
                    model.likecount = numString
                    self.dataArray.append(model)
                    
                }
                
                self.gifttableview.reloadData()

                //print(jsonresult)

            }
        }
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return self.dataArray.count
    
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell:giftTabelViewcell = tableView .dequeueReusableCellWithIdentifier("Gifsayidentifile") as! giftTabelViewcell
        let model = self.dataArray[indexPath.row]
        cell.likeNumberLabel.text = model.likecount
        
        // 這個就是用到 Kingfisher
        cell.backGroundImage.kf_setImageWithURL(NSURL(string: model.cover_image_url)!)
        return cell
        
    }
    
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        
        print(indexPath.row)
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

   模擬機上的運行效果:

 

三:進一步學習

      上面說的這些,能夠看到我數據咱們是拿到了,也解析了使用了!就是這幾個三方最簡單的使用了!下面再給你們一下連接,你們有空好好學習一下上面這幾個庫!!

    Alamofire: 網上好多直接抄襲了簡書上面翻譯的那篇文章,不夠明瞭,簡潔!很差就是很差,說我渣渣看不懂也好,反正就這麼吊,不服憋着!哈哈哈哈哈。。給你們推薦這個極客學院的一個視頻: http://www.jikexueyuan.com/course/2680.html  講的很明瞭很簡潔,恩,我就是喜歡!要會員什麼的,邀請小夥伴有三十天,別和我說你只有一個QQ號!!╭(╯^╰)╮ 

   SwiftyJSON:http://www.oschina.net/translate/swiftyjson-how-to-handle-json-in-swift (這個網上真的不少,你能夠本身找找)

   Kingfisher: http://www.jianshu.com/p/fa2624ac1959(簡書翻譯)

相關文章
相關標籤/搜索