繁体   English   中英

Swift 3和Alamofire-JSON中的图像和数据

[英]Swift 3 and Alamofire - Image and data from JSON

我有一个项目正在尝试使用alamofire从Web网址引入数据。 我正在尝试引入图像和文本,但始终使构建失败。 我正在尝试将数据(图像和文本)添加到标签= 1和2。我的代码在任何帮助下都将不胜感激。 我对Swift非常陌生。 谢谢

迅速

import UIKit
import Alamofire

struct postinput {
    let mainImage : UIImage!
    let name : String!

}


class TableViewController: UITableViewController {

    var postsinput = [postinput]()

    var mainURL = "https://www.testJSON.com"

    typealias JSONstandard = [String : AnyObject]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        callAlamo(url: mainURL)
    }

    func callAlamo(url : String){
        Alamofire.request(url).responseJSON(completionHandler: {
            response in

            self.parseData(JSONData: response.data!)


        })

    }

    func parseData(JSONData : Data) {
        do {
            var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONstandard

            if let posts = readableJSON["posts"] as? [JSONstandard] {
                for post in posts { 
                    let title = post["title"] as! String

                    if let images = post["image"] as? JSONstandard {
                        let mainImageURL = URL(string: imageData["url"] as! String)
                        let mainImageData = NSData(contentsOf: mainImageURL!)

                        let mainImage = UIImage(data: mainImageData as! Data)

                    }

                    postsinput.append(postinput.init(mainImage: mainImage, name: name))


                }

                self.tableView.reloadData() 
            }

        }


        catch {
            print(error)
        }


    }




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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

        // cell?.textLabel?.text = titles[indexPath.row]

        let mainImageView = cell?.viewWithTag(2) as! UIImageView

        mainImageView.image = postsinput[indexPath.row].mainImage

        let mainLabel = cell?.viewWithTag(1) as! UILabel

        mainLabel.text = postsinput[indexPath.row].name


        return cell!
    }

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


}

JSON格式

 { posts: [ { id: “000000”, url: "/content/interview2”, date: "2016-11-03 09:01:41", modified: "2016-11-03 09:03:47", title: "An interview", image: "https://www.example.com/sites/default/files/oregood.jpeg", summary: { value: "<p>Latin text here</p> ", format: "filtered_html" } ]}

以下是生成错误的原因:

  1. 您在获得mainImage的上下文之外添加了这一行postsinput.append(postinput.init(mainImage: mainImage, name: name)) 基于json,我相信您应该像这样重写它。

     if let imageUrl = post["image"] as? JSONstandard { let mainImageURL = URL(string: imageUrl) let mainImageData = NSData(contentsOf: mainImageURL!) let mainImage = UIImage(data: mainImageData as! Data) postsinput.append(postinput.init(mainImage: mainImage, name: title)) } 
  2. 即使执行此操作,变量imageDataname imageData定义。 您应该调查一下。

  3. 仅作为建议,请勿强行打开可选包装。 尽可能使用可选绑定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM