我的场景我在视图中有四个标签,我需要获取标记值的结果并分配给该标签。如果我在数组中仅收到一个索引,则需要调用其他函数。我正在使用旧的方法JSON不可编码和第三方库。请提供一些解决方案。
下面,我的答复
{
"status": 1,
"status_code": 200,
"result": [
"100 marks",
"30 marks",
"40 marks",
"70 marks"
]
}
下面我正在使用的代码
if (status_code != 200) {
print("ERROR:\(String(describing: status_code))")
} else {
let results = result["result"] as? String
print("Marks:\(results ?? "")")
// Call confirmation alert
DispatchQueue.main.async {
self.one_label.text! = ""
self.two_label.text! = ""
self.three_label.text! = ""
self.four_label.text! = ""
}
}
答案 0 :(得分:1)
您的代码不正确的部分是:您试图将result["result"]
强制转换为单数String
,事实并非如此!它是字符串的 array 。因此,您应该做的是:
if let results = result["result"] as? [String] {
print(results[0]) // first mark in the array (100 marks)
}
此外:
在这一点上,我建议采用模板化数据的方法,而不要处理字典。由于拥有有效的Json,因此您可以使用Docadable
协议轻松实现它,例如:
let json = """
{
"status": 1,
"status_code": 200,
"result": [
"100 marks",
"30 marks",
"40 marks",
"70 marks"
]
}
""".data(using: .utf8)
struct Result: Decodable {
var status: Int
var statusCode: Int
var result: [String]
enum CodingKeys: String, CodingKey {
case status
case statusCode = "status_code"
case result
}
}
let decoder = JSONDecoder()
let resultObject = try decoder.decode(Result.self, from: json!)
print(resultObject)
答案 1 :(得分:0)
json中的结果是数组。因此,您需要将其转换为数组。
let results = result["result"] as? [String]
print("Marks:\(results ?? "")")
答案 2 :(得分:-1)
结果包含[String],所以请
替换
let results = result["result"] as? String
到
if let results = result["result"] as? [String], results.count >= 4 {
self.one_label.text! = results[0] ?? ""
self.two_label.text! = results[1] ?? ""
self.three_label.text! = results[2] ?? ""
self.four_label.text! = results[3] ?? ""
} else {
// Call your function here
}