使用 Alamofire 和 Argo:找不到成员 'None'

Using Alamofire & Argo: Could not find member 'None'

Argo 在 Swift 上解析 Alamofire 响应时遇到问题。它说:

找不到成员'None'

我真的是 Swift 的菜鸟,我不知道会发生什么。我尝试使用 nil 和 &error 而不是 .None 但仍然无法正常工作

import Foundation
import Alamofire
import Argo
import Runes

public class ApiConnector{

    private final var serverHost = "http://192.168.1.2/gpio-web/api/v1/api.php";

    func readPin(pin: Int) -> String{
        var result = "empty"
        Alamofire.request(.GET, serverHost, parameters: ["action": "input", "pins": pin])
            .response { (request, response, data, error) in
                let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: .None)
                if let j: AnyObject = json {
                    let value = JSONValue.parse(j)
                    let response = Response.decode(value)
                }

        }

        return result;

    }


}

struct Response {
    let status: String;
}

 extension Response: JSONDecodable {
    static func create(status: String) -> Response {
        return Response(status: status)
    }

    static func decode(j: JSONValue) -> Response? {
        return Response.create
            <*> j <| "status"
    }
}

您可以将 nil 传递给 optionserror 参数:

let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)

但您可能应该使用错误字段,并在发生错误时做出响应:

var error: NSError?
let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error)

if (json == nil && error != nil) {
    let error = error!
    // do something with error
}

就是说,您正在尝试在这里做 Alamofire 已经可以为您做的事情:解析 JSON。

不使用 .response(),而是使用 .responseJSON(:_)。这将为您转换对象。