Член экземпляра «decode» не может использоваться для типа «JSONDecoder»; вы хотели вместо этого использовать значение этого типа

Я реализую JSONDecoder, чтобы получить данные JSON из Wordpress json, моя структура находится в другом быстром файле, я получаю эту ошибку, вот мой код. в статье let я получаю сообщение об ошибке

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


}

person Guren    schedule 19.10.2018    source источник
comment
JSONDecoder.decode(LatestArticleModel , from: data) =› JSONDecoder().decode(LatestArticleModel.self , from: data)? Это метод экземпляра, а не метод класса, поэтому вам нужно использовать объект. Вроде let jsonDecoder = JSONDecoder(); jsonDecoder.decode(LatestArticleModel.self, from: data), а self не хватает.   -  person Larme    schedule 19.10.2018


Ответы (2)


article должен быть объявлен как:

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

Если вы проверите decode(_:forKey:), вы увидите, что это метод экземпляра (не статический), что означает, что вы должны вызывать его через экземпляр JSONDecoder. Кроме того, параметр type — это T.Type (метатип), что означает, что он должен быть self типа.

Кроме того: что такое T.Type в swift.

person Ahmad F    schedule 19.10.2018
comment
Это также метод экземпляра, а не метод класса, в его объявлении нет static. Потому что я думаю, что ошибка говорит об этом, а не об отсутствующем self. - person Larme; 19.10.2018
comment
Теперь сработало спасибо. Я добавлю это, это мой код пусть декодер = JSONDecoder() пусть статья = попробуйте! decoder.decode(LatestArticleModel.self, from: data) - person Guren; 19.10.2018

Проблема, о которой говорит ошибка компилятора, заключается в том, что вы пытаетесь вызвать метод экземпляра для типа вместо экземпляра этого типа. Вам нужно создать экземпляр JSONDecoder и вызвать для него decode.

Как только вы это исправите, вы также столкнетесь с проблемой, что вам нужно передать метатип методу, поэтому LatestArticleModel.self вместо LatestArticleModel.

let article = JSONDecoder().decode(LatestArticleModel.self, from: data)
person Dávid Pásztor    schedule 19.10.2018