我正在使用Alamofire从服务器获取响应。 以下是我使用的代码:
Alamofire.upload(multipartFormData: { multipartFormData in
multipartFormData.append(imageData!, withName: "pic", fileName: "filename.png", mimeType: "image/png")
}, to: "http://cse-jcui-08.unl.edu:8910/image",
method: .post,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseString { response in
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
我的问题是,如何将名称和值保存为变量,以便我可以在我的应用程序中显示它? 我这样做的方式,实际上我在SwiftyJSON上尝试了几次,
像这样:struct Food {
var name: String
var value: String
init(name: String, value: String) {
self.name = name
self.value = value
}
}
let json = response.result.value
let name = json!["name"]
但它给我一个这样的错误:不能使用'String'类型的索引下标'String'类型的值
那么,有人会很高兴帮我这个吗?提前致谢
答案 0 :(得分:0)
Alamofire不会自动解析response.result.value
(值仍然是序列化的JSON字符串)。由于您提到了SwiftyJSON,请尝试使用SwiftyJSON' JSON(jsonString)
函数解析该值。
/** Parse the string with SwiftyJSON */
let json = JSON(response.result.value)
let name = json["name"]
/** Parse Predictions arrayValue */
for row in json["predictions"].arrayValue {
let name = row["name"].string
let value = row["value"].double
print("Prediction for \(name) is \(value)")
}
不确定这是唯一的问题,但这只是一个开始。
答案 1 :(得分:0)
以下是使用Swift 4中的Codable
协议进行本机JSON解析的示例:
// Struct inheriting Codable protocol
struct Food: Codable {
var name: String
var value: Double
}
struct Prediction: Codable {
var foods: [Food]
enum CodingKeys: String, CodingKey {
case foods = "prediction"
}
}
// SAMPLE DATA BEGIN, Use alamofire response instead
let string = """
{"prediction":[
{"name":"marshmallow","value":0.2800},
{"name":"caesar salad","value":0.0906},
{"name":"egg","value":0.0748},
{"name":"apple","value":0.0492},
{"name":"chickpea","value":0.0469}
]}
"""
let data = string.data(using: .utf8)!
用法:
let foods = try! JSONDecoder().decode(Prediction.self, from: string.data(using: .utf8)!).foods
print(foods[0].name) // marshmallow
print(foods[0].value) // 0.28
注意:Codable
使SwiftyJSON成为解析器已过时。