Арго: Тип не соответствует протоколу "Декодируемый"

Я только начинаю с Арго, чтобы разобрать мой ответ json на объекты. У меня следующий код (см. Ниже), но он выдает следующие ошибки:

Тип "Приложение" не соответствует протоколу "Декодируемый"

Невозможно вызвать 'curry' со списком аргументов типа '((applicationID: String, contact: String, состояние: String, jobTitle: String, area: String, pay: String) -> Application)'

import Foundation
import Argo
import Curry

struct Application {

    let applicationID: String
    let contact: String
    let state: String
    let jobTitle: String
    let area: String
    let pay: String
}

extension Application: Decodable {
    static func decode(j: JSON) -> Decoded<Application> {
        return curry(Application.init)
        <^> j <| "ApplicationID"
        <*> j <| "contact"
        <*> j <| "state" // Use ? for parsing optional values
        <*> j <| "jobTitle" // Custom types that also conform to Decodable just work
        <*> j <| "area" // Parse nested objects
        <*> j <| "pay" // parse arrays of objects
    }
}

Я расширил приложение, чтобы его можно было декодировать, поэтому не понимаю, почему я получаю эту ошибку.

Также я попытался добавить пример со страницы git-концентратора Argo здесь: https://github.com/thoughtbot/Argo с типом структуры User, Однако это выдает ту же ошибку.

Я использовал стручки какао для установки арго и карри. Я также очистил свой проект и перезапустил с момента их установки. Однако я все еще получаю эти ошибки.

Кто-нибудь знает, почему это может происходить?

1 ответ

Я установил Арго и Карри, используя CocoaPods. Затем попробовал следующий код. Работает нормально без проблем.

import UIKit

import Argo
import Curry

struct User {
    let id: Int
    let name: String
}

extension User: Decodable {
    static func decode(j: JSON) -> Decoded<User> {
        return curry(User.init)
            <^> j <| "id"
            <*> j <| "name"
    }
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let stringJSON = "{\"id\":1, \"name\":\"Siva\"}"
        let data = stringJSON.dataUsingEncoding(NSUTF8StringEncoding)

        let json: AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: [])

        if let j: AnyObject = json {
            let user: User? = decode(j)
            print("user - ", user)
        }
    }
}
Другие вопросы по тегам