【问题标题】:Instance member 'decode' cannot be used on type 'JSONDecoder'; did you mean to use a value of this type instead实例成员 'decode' 不能用于类型 'JSONDecoder';你的意思是改用这种类型的值吗
【发布时间】:2019-03-24 03:32:08
【问题描述】:

我实现 JSONDecoder 以从 Wordpress json 获取 JSON 数据 我的结构在另一个 swift 文件中我收到此错误这是我的代码。在让文章我得到错误

URLSession.shared.dataTask(with: url!){ (data,response ,err) in
        guard let data = data else{return}
        let article = JSONDecoder.decode(LatestArticleModel , from: data)

    }.resume()

LatestArticleModel.swift

struct LatestArticleModel : Decodable {

    var id: Int
    var date: String
    var link: String
    var title_rendered :String
    var author: Int
    var category: Int
    var img_link: String
    var content_rendered: String
    var exerpt_rendered: String


}

【问题讨论】:

  • JSONDecoder.decode(LatestArticleModel , from: data) => JSONDecoder().decode(LatestArticleModel.self , from: data)?它是一个实例方法,而不是类方法,所以你需要使用一个对象。喜欢let jsonDecoder = JSONDecoder(); jsonDecoder.decode(LatestArticleModel.self, from: data),但缺少self

标签: ios swift jsondecoder


【解决方案1】:

article 应声明为:

let decoder = JSONDecoder()
let article = decoder.decode(LatestArticleModel.self , from: data)

如果您检查decode(_:forKey:),您会发现它是一个实例方法(不是静态方法),这意味着您应该通过JSONDecoder 的实例调用它。还有,type参数是T.Type元类型),也就是说它应该是类型的self

另外:what is T.Type in swift.

【讨论】:

  • 也是实例方法,不是类方法,它的声明中没有static。因为我认为错误是在谈论那个,而不是关于缺少的self
  • 现在可以了,谢谢。我会添加这是我的代码 let decoder = JSONDecoder() let article = try! decoder.decode(LatestArticleModel.self, from: data)
【解决方案2】:

编译器错误告诉你的问题是你试图调用一个类型的实例方法而不是那个类型的实例。你需要创建一个JSONDecoder 的实例并在上面调用decode

一旦你解决了这个问题,你也会遇到需要将元类型传递给方法的问题,所以LatestArticleModel.self 而不是LatestArticleModel

let article = JSONDecoder().decode(LatestArticleModel.self, from: data)

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多