SWIFT“应解码 Dictionary<String, Any>,但找到了一个数组。”,underlyingError: nil))

Posted

技术标签:

【中文标题】SWIFT“应解码 Dictionary<String, Any>,但找到了一个数组。”,underlyingError: nil))【英文标题】:SWIFT "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil)) 【发布时间】:2020-11-18 12:12:25 【问题描述】:

这是我的第一次问题。 我以为我做的一切都是正确的。我的模型建错了吗?我不确定如何解决此错误。 这是我的代码,在正确的模型之后我想将数据传递给表:

func createJSON() 
    if let url = URL(string: "https://newsapi.org/v2/everything?q=apple&from=2020-11-15&to=2020-11-15&sortBy=popularity&apiKey=c5722efe6e65432fb5c116d3e1403dca") 
        
        let session = URLSession(configuration: .default)
        let task = session.dataTask(with: url)  (data, response, error) in
            guard let data = data, error == nil else  return 
            
            var result: NewsResult?
            do 
                result = try JSONDecoder().decode(NewsResult.self, from: data)
             catch 
                print("error masage: \(error)")
            
            guard let finalResult = result else  return 
            
            print(finalResult.status)
            print(finalResult.totalResults)
//             print(finalResult.articles)
            
//            let newNews = finalResult.artiscles
//            self.newsApple.append(contentsOf: newNews)
            
            DispatchQueue.main.async 
                self.tableView.reloadData()
            
        
        task.resume()
    



//    MARK: - Model Data Source

struct NewsResult:Codable 
    let status: String
    let totalResults: Int // totalResults
    let articles: [articles]


struct articles:Codable 
    let author: String // articles[0].author
    let title: String
    let description: String
    let url:String
    let urlToImage:String
    let publishedAt: String
    let content: String

【问题讨论】:

【参考方案1】:

您编写的模型代码未与 JSON 结果正确映射。尝试用以下代码替换您的模型结构:

struct NewsResult: Codable 
    var status: String?
    var totalResults: Int?
    var articles: [Article]?


struct Article: Codable 
    var source: Source?
    var author: String?
    var title: String?
    var articleDescription: String?
    var url: String?
    var urlToImage: String?
    var publishedAt: String?
    var content: String?


struct Source: Codable 
    var id : String?
    var name: String?

【讨论】:

@Sebastian 如果这对您有用,请接受答案,以便在遇到类似问题时对其他人有所帮助。 "感谢您的反馈!声望低于 15 人的投票将被记录,但不要更改公开显示的帖子得分" 好的,知道了!您也可以通过为答案添加对勾标记将其标记为正确答案。

以上是关于SWIFT“应解码 Dictionary<String, Any>,但找到了一个数组。”,underlyingError: nil))的主要内容,如果未能解决你的问题,请参考以下文章

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift

swift swift_optional4.swift