所以我有它的表从Swift代码中的固定数组返回数据。
现在,但是我想将该固定数据切换出此JSON中的数据-https://api.drn1.com.au/api-access/news
但是,因为我在当前代码中使用了关键字news,所以发现很难调用此JSON,因为我需要使用关键字news,因为JSONP具有
{“新闻”:...}
现在这是当前代码,我知道所有人都需要更改此代码以注入JSON数据。
func createArray() -> [News] {
return [News(title: "Hello") , News(title: "how") , News(title: "You")]
}
起初,我认为这就像更改我正在播放的json获取数据一样简单。
这是脚本(结构部件未包括在其中):
@objc func nowplaying(){
let jsonURLString = "https://api.drn1.com.au/station/playing"
guard let feedurl = URL(string: jsonURLString) else { return }
URLSession.shared.dataTask(with: feedurl) { (data,response,err) in
guard let data = data else { return }
do {
let nowplaying = try JSONDecoder().decode(Nowplayng.self, from: data)
nowplaying.data.forEach {
DispatchQueue.main.async {
self.artist.text = nowplaying.data.first?.track.artist
self.song.text = nowplaying.data.first?.track.title
}
}
} catch let jsonErr {
print("error json ", jsonErr)
}
}.resume()
}
我将如何使用以下代码来做到这一点
struct NewsData: Decodable{
let news: [articalData]
}
struct articalData: Decodeable{
let title: String
}
获取新闻:
@objc func newsfetch(){
let jsonURLString = "https://api.drn1.com.au/api-access/news"
guard let feedurl = URL(string: jsonURLString) else { return }
URLSession.shared.dataTask(with: feedurl) { (data,response,err) in
guard let news = data else { return }
do {
let news = try JSONDecoder().decode(NewsData.self, from: news)
NewsData.news.forEach {
print(NewsData.news.title)
}
} catch let jsonErr{
print("error json ", jsonErr)
}
}.resume()
}
但是,当我这样做时,我会出错
第一个在第一个结构中出现
struct NewsData:Decodable {//错误类型'NewsData'不存在
符合协议“可解码”
第二次错误
struct articalData:Decodeable {//使用未声明的类型
“可解码”
第三次错误
NewsData.news.forEach {//闭包参数列表的上下文类型
需要1个参数,不能隐式忽略该参数插入'_ in'
//实例成员'news'不能用于类型'NewsData'
print(NewsData.news.title)//实例成员“ news”不能用于类型“ NewsData”,类型“ [articalData]”的值没有成员“ title”
}
我知道我要实现的功能与现在播放的JSON不同,但是它们的格式几乎相同。任何建议都将受到欢迎。
最佳答案
第一个和第二个错误是由错字引起的(Marina的答案中已经提到)。
这是两次Decodable
。并且请用首字母大写来命名结构
struct NewsData: Decodable {
let news: [ArticleData]
}
struct ArticleData: Decodable {
let title: String
}
第三个错误实际上是两个错误。您必须在实例
forEach
上调用news
(而不是类型News
),并且必须在闭包中使用参数。我重命名了一些变量以避免混淆
guard let data = data else { return }
do {
let newsData = try JSONDecoder().decode(NewsData.self, from: data)
newsData.news.forEach { item in
print(item.title)
}
或更短的速记参数名称语法
newsData.news.forEach { print($0.title) }
请阅读错误消息。其中大多数内容非常清晰和具有描述性。
关于ios - 将UITableViewCell从数组转换为JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59072355/