我希望尝试引用所有"标题"在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()
并提前感谢您的帮助!
答案 0 :(得分:0)
如果让entry = feedFromJson [“entry”]为?字符串,让author = feedFromJson [“domain”]为?字符串{
iOS的做法不是这个。
feedFromJson [“entry”] 是nil,而不是字符串。我猜你试图获得“饲料”标题。
if let entry = (json["feed"] as Dictionary)?["title"]
获得“入围”标题。只需遍历数组,即可获得标题。
let titleDict = feedFromJson["title"] as? Dictionary
let title = titleDict["title"] as? String
article.headline = title
太快了。
如果让feedFromJson = json [“feed”]?[“entry”]为? [[String: AnyObject]] {
你应该一步一步。
if let feedFromJson = (json["feed"] as Dictionary)?["entry"] as? [[String : AnyObject]] {
答案 1 :(得分:0)
我正在努力尝试了解您的需求。如果你想获得一个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
}
}