2016-05-24 5 views
0

Я только начинаю с Argo, чтобы разобрать мой ответ json на объекты. Я, имеющие следующий код (см ниже), но он продолжает бросать вверх следующие ошибки:Argo: Тип не соответствует протоколу 'Decodable'

Тип «Application» не соответствует протоколу «декодируемого»

не может ссылаться на «Карри» с списке аргументов Тип '((ApplicationID: String, контакт: String, состояние: String, jobTitle: String, площадь: String, получка: 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 
    } 
} 

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

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

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

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

ответ

0

Я установил Арго и Карри, используя 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) 
     } 
    } 
}