我刚开始使用Argo将我的json响应解析为对象。我有以下代码(见下文),但它不断抛出以下错误:
键入'应用程序'不符合协议' Decodable'
无法调用咖喱'使用类型'的参数列表((applicationID: String,contact:String,state:String,jobTitle:String,area: String,pay:String) - >应用)'
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 hub页面中的示例:https://github.com/thoughtbot/Argo,结构类型为User
。然而,这会引发同样的错误。
我用可可豆荚安装argo和咖喱。我还清理了我的项目,并在安装它们后重新启动。但是我仍然遇到这些错误。
有谁知道为什么会这样?
答案 0 :(得分:0)
我使用CocoaPods安装了Argo和Curry。然后尝试了以下代码。它没有任何问题,工作正常。
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)
}
}
}