2016-05-24 8 views
0

Ich beginne gerade mit Argo, meine JSON-Antwort in Objekte zu analysieren. Ich den folgenden Code aufweist (siehe unten), aber es hält die folgenden Fehler werfen:Argo: Typ entspricht nicht dem Protokoll 'Decodable'

Typ ‚Anwendung‘ nicht entspricht Protokoll ‚Dekodierbare‘

Kann nicht aufrufen ‚Curry‘ mit einer Liste der Argumente Typ '((applicationID: String, Kontakt: String, Zustand: String, jobtitle: String, Fläche: String, Pay: String) -> Anwendung)'

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 
    } 
} 

I Anwendung erweitert werden decodierbar so verstehe nicht, warum ich diesen Fehler bekomme.

Auch ich habe versucht, das Beispiel von der Argo git Nabe Seite hier hinzuzufügen: https://github.com/thoughtbot/Argo mit Strukturtyp User. Dies wirft jedoch den gleichen Fehler auf.

Ich habe Kakaoschoten verwendet, um Argo und Curry zu installieren. Ich habe auch mein Projekt gereinigt und neu gestartet, seit ich sie installiert habe. Allerdings bekomme ich immer noch diese Fehler.

Weiß jemand, warum dies passieren könnte?

Antwort

0

Ich installierte Argo und Curry mit CocoaPods. Dann probier den folgenden Code aus. Es funktioniert ohne Probleme.

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) 
     } 
    } 
}