Swift Decoder не может вызвать «декодирование» со списком аргументов типа «(VrOpsObjectStatistics!, from: Data)»

Привет, ребята,

Я декодирую данные, поступающие из серверной системы, в JSON с помощью: JSONDecoder().decode(<#T##type: Decodable.Protocol##Decodable.Protocol#>, from: <#T##Data#>).

Я делал это часто для разных типов данных, но на этот раз я получил следующую ошибку: "Cannot invoke 'decode' with an argument list of type '(VrOpsObjectStatistics!, from: Data)"

Вот моя структура и частичный код для процедуры декодирования:

Моя структура:

struct  VrOpsObjectStatistics : Decodable
{
    var resourceId: String
    struct StatList : Decodable
    {
        struct Stat : Decodable
        {
            var timestamps: [Date]
            struct StatKey : Decodable
            {
                var key: String
            }
            var statKey: StatKey
            var data: [Double]
        }
        var stat: [Stat]
    }

  }
    final class Ops
    {
            static let sharedVrOps  = VrOps();
            var vrOpsObjectStatistics : VrOpsObjectStatistics!;
        func decodeDataToJson(jsonData : Data, parsingType : String) -> 
(Bool, Any)
        {
         do  
         {
         self.vrOpsObjectStatistics = try 
      JSONDecoder().decode(vrOpsObjectStatistics.self, from: jsonData);
         }
    catch
            {
                print(error)
                return (false, error)
            }

    }
}

person Ertan Metin    schedule 27.09.2018    source источник


Ответы (1)


Измените эту строку:

JSONDecoder().decode(vrOpsObjectStatistics.self, from: jsonData);

to

JSONDecoder().decode(VrOpsObjectStatistics.self, from: jsonData)

Метод decode(_:from:) ожидает метатип типа, который может можно найти, вызвав .self для типа, а не для экземпляра этого типа. Чтобы узнать больше о типе метатипа, посмотрите здесь .

person ielyamani    schedule 27.09.2018