Json 解析在 swift 使用 Alamofire,ImageLoader,来分析关键值沿与对象在表视图中有图像

发布时间: 2017/3/5 20:08:10
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
import UIKit
import CarbonKit
import Alamofire
import ImageLoader

class ViewControllerOne: UIViewController,UITableViewDelegate,UITableViewDataSource,NSURLConnectionDelegate{

    @IBOutlet var tableView: UITableView!

    var detailHours = [DetailHour]()

    var refresh: CarbonSwipeRefresh = CarbonSwipeRefresh()


    override func viewDidLoad() {
        super.viewDidLoad()

        refresh = CarbonSwipeRefresh(scrollView: self.tableView)

        refresh.setMarginTop(0)
        refresh.colors = [UIColor.blueColor(), UIColor.redColor(), UIColor.orangeColor(), UIColor.greenColor()]
        self.view.addSubview(refresh)
        refresh.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged)

        loadPosts()


        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func loadPosts()
    {

        let testhappyhour:DetailHour = DetailHour(thumbnail: "T", itemname: "T", itemtype: "T", price: "T")
        let url:String = "http://enigmatic-woodland-35608.herokuapp.com/biharidhaba.json"
        Alamofire.request(.GET, url, encoding:.JSON).responseJSON
            {
                response in switch response.result
                {
                case .Success(let JSON):
                    let response = JSON as! NSArray
                    for item in response{
                        //loop through data items
                        let obj = item as! NSDictionary
                        let detailhour = DetailHour(thumbnail:obj["thumbnail"] as! String,itemname:obj["itemname"] as! String,itemtype:obj["itemtype"] as! String,price:obj["price"] as! String)
                        self.detailHours.append(detailhour)
                    }
                    self.tableView.reloadData()
                case .Failure(let error):
                    print("Request failed with error: \(error)")
                }
        }
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return detailHours.count
    }

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ViewControllerOneTableViewCell

        let detailHour = detailHours[indexPath.row]
        cell.name.text =    detailHour.itemname
        cell.type.text = detailHour.itemtype
        cell.price.text = detailHour.price

    //    cell.type?.text = detailHour.itemtype
    //    cell.price?.text = detailHour.price

//        if let url = NSURL(string: detailHour.thumbnail)
//        {
//            cell.image.load(url)
//        }
//        else
//        {
//            
//        }


        //"Cell \(Int(indexPath.row))"
        return cell
    }





    func refresh(sender: AnyObject) {
        NSLog("REFRESH")
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(5 * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
            self.endRefreshing()
        }
    }

    func endRefreshing() {
        refresh.endRefreshing()
    }



    /*
    // 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.
    }
    */

}

我需要解析 json 文件包含图像、 价格和使用 Alamofire,SwiftyJson,ImageLoader.I 的表中的项目类型是不能够解析 json 键值,所以我需要一些帮助。 Json 文件包含在 URL 中和我用 alamofire 来解析 json 但它崩溃因为我不能做到关键值的解析 od json。我使用 CarbonKit 选项卡栏控制器。

解决方法 1:

你可以使用SwiftyJSON在 Alamofire 一个简单明了的方式解析 JSON,像在这个例子中︰

Alamofire.request(.GET, "yourURL").responseJSON { response in

        switch(response.result) {
        case .Success(let value):
            // construct the JSON 
            let json = JSON(value)

            // returns nil if it's not an array
            if let recommends = json["recommended"].array {
                 for item in recommends {
                    let thumbnail = item["thumbnail"].string
                    let itemname = item["itemname"].string
                    let itemtype = item["itemtype"].string
                    let price = item["price"].string

                    // create your object here
                }
            }

        case .Failure(let error):
            print("Request failed with error: \(error)")
        }
    }

在上面的例子中根据您的 url 在 JSON 中有数组称为 "recommended" 它是为我做的第一件事是在 SwiftyJSON 中使用可选 getter以验证它是否一个数组。然后分析数据的数组。

您可以安装 SwiftyJSON 使用 CocoaPods 或迦太基,该轮到你。别忘了看看在可选 getter SwiftyJSON 它是很好的方式来安全地编写代码。

我希望这帮助你。

赞助商