ios - 如何在 xcode 8 中的对象中引用数组中的对象?

标签 ios arrays json swift object

我想尝试在 xcode 8 中引用此 json ( link here) 中的所有“标题”。问题是在我可以提取标题之前需要引用一个对象和数组(我相信)数据,我不确定该怎么做。

到目前为止,这是我得到的:

func fetchFeed(){
    let urlRequest = URLRequest(url: URL(string: "http://itunes.apple.com/us/rss/topalbums/limit=10/json")!)

    let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in

        if error != nil {
            print(error)
            return
        }

        self.artists = [Artist]()
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]

            if let feedFromJson = json["feed"]?["entry"] as? [[String : AnyObject]] {
                for feedFromJson in feedsFromJson {
                    let feed = Feed()
                    if let entry = feedFromJson["entry"] as? String, let author = feedFromJson["domain"] as? String {

                        feed.entry = entry

                        article.headline = title

                    }
                    self.articles?.append(article)
                }
            }
            DispatchQueue.main.async {
                self.tableview.reloadData()

提前感谢您的帮助!

最佳答案

我正在努力了解您的需求。如果你想获得一个 Article 数组,其中 headline 是条目的标题标签,下面是我如何欺骗它。

func articles(from json: Any?) -> [Article] {
    guard let json = json as? NSDictionary, let entries = json.value(forKeyPath: "feed.entry") as? [NSDictionary] else {
        return []
    }

    return entries.flatMap { entry in
        guard let title = entry.value(forKeyPath: "title.label") as? String else {
            return nil
        }

        var article = Article()
        article.headline = title
        return article
    }
}

你这样调用它

self.articles = articles(from: json)

NSDictionary 具有近乎神奇的方法 value(forKeyPath:)。调用 json.value(forKeyPath: "feed.entry") 返回字典数组。每个字典都是 json 中的一个 "entry" 对象。接下来,我映射每个条目以调用返回字符串的 entry.value(forKeyPath: "title.label")


如果这不仅仅是一个快速解决方案,那么我会考虑添加 SwiftyJSON到您的项目。

func articles(from json: Any?) -> [Article] {
    return JSON(json)["feed"]["entry"].arrayValue.flatMap { entry in
        guard let title = entry["title"]["label"].string else {
            return nil
        }

        var article = Article()
        article.headline = title
        return article
    }
}

关于ios - 如何在 xcode 8 中的对象中引用数组中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44379690/

相关文章:

javascript - 无法加载没有扩展名的资源

ios - 如何在swift中使用 ImageView 生成随机图像

ios - 解析和核心数据关系和指针

ios - 如何通过点击带有黄色圆圈的按钮来隐藏键盘?

java - 在 Java Android 中加载外部 JSON 文件

c# - 如何使用 SimpleJson c# 获取 Json 文件中的 key

iOS 8 在不安装 Xcode 的情况下从用户设备读取控制台日志

java - 如何对从 JAVA 中的 .txt 文件读取的数组进行排序

c - 反转字符串的函数将字符串更改为空,而不是反转

Javascript从数组中删除项目但保留引用编号