#arrays #swift #alamofire #indexof #swifty-json
#массивы #быстрый #alamofire #indexof #swifty-json
Вопрос:
Здравствуйте, я новичок в swift, и я вызываю API через Alamofire
и SwiftyJON
и я могу успешно повторно получить ответ, но из этих данных я хочу повторно получить только первые два индекса данных позвольте мне объяснить вам вкратце
Вот мой ответ
{
"previous_inspection_list" : [
{
"inspection_number" : "3",
"date_inspected" : "2019-04-13",
"fk_properties_id" : "2",
"created_by" : "3",
"signature" : "img_ZbsOx3fx1r1555154350.png",
"status" : "1",
"fk_user_id" : "3",
"signature_name" : "Vishal Parmar",
"created_date" : "2019-04-13 05:19:10",
"updated_by" : "0",
"inspections_id" : "8",
"updated_date" : "0000-00-00 00:00:00"
},
{
"inspection_number" : "2",
"date_inspected" : "2019-04-13",
"fk_properties_id" : "2",
"created_by" : "3",
"signature" : "img_uVQw3K4pfY1555140089.png",
"status" : "1",
"fk_user_id" : "3",
"signature_name" : "Vishal Parmar",
"created_date" : "2019-04-13 01:21:29",
"updated_by" : "0",
"inspections_id" : "6",
"updated_date" : "0000-00-00 00:00:00"
},
{
"inspection_number" : "1",
"date_inspected" : "2019-04-13",
"fk_properties_id" : "2",
"created_by" : "2",
"signature" : "img_g6GrjsofPE1555137646.png",
"status" : "1",
"fk_user_id" : "2",
"signature_name" : "Mihir Panchasara",
"created_date" : "2019-04-13 00:40:46",
"updated_by" : "0",
"inspections_id" : "3",
"updated_date" : "0000-00-00 00:00:00"
}
],
"success" : "1",
"message" : "Successfully."
}
как вы можете видеть мой ответ сейчас, я хочу восстановить только первые два значения индекса, как показано ниже
Ожидаемый результат
для ожидаемого результата 1-го индекса
{
"inspection_number" : "3",
"date_inspected" : "2019-04-13",
"fk_properties_id" : "2",
"created_by" : "3",
"signature" : "img_ZbsOx3fx1r1555154350.png",
"status" : "1",
"fk_user_id" : "3",
"signature_name" : "Vishal Parmar",
"created_date" : "2019-04-13 05:19:10",
"updated_by" : "0",
"inspections_id" : "8",
"updated_date" : "0000-00-00 00:00:00"
}
ожидаемый результат 2-го индекса
{
"inspection_number" : "2",
"date_inspected" : "2019-04-13",
"fk_properties_id" : "2",
"created_by" : "3",
"signature" : "img_uVQw3K4pfY1555140089.png",
"status" : "1",
"fk_user_id" : "3",
"signature_name" : "Vishal Parmar",
"created_date" : "2019-04-13 01:21:29",
"updated_by" : "0",
"inspections_id" : "6",
"updated_date" : "0000-00-00 00:00:00"
}
позвольте мне показать вам мой код, который я пробовал
let sampleArray = data.array
let firstdict = sampleArray![0]
print(firstdict)
let signature_name = firstdict["signature_name"].stringValue
let inspection_number = firstdict["inspection_number"].stringValue
let date_inspected = firstdict["date_inspected"].stringValue
let inspections_id = firstdict["inspections_id"].stringValue
self.lblFirstInspName.text = signature_name
self.lblInspNumber.text = "#(inspection_number)"
self.lblFirstInspDate.text = date_inspected
self.inspID1 = inspections_id
let secondDict = sampleArray![1]
let signature_name1 = secondDict["signature_name"].stringValue
let inspection_number1 = secondDict["inspection_number"].stringValue
let date_inspected1 = secondDict["date_inspected"].stringValue
let inspections_id2 = secondDict["inspections_id"].stringValue
self.lblSeconfInspName.text = signature_name1
self.lblSecondInspNumber.text = "#(inspection_number1)"
self.lblSecondInspDate.text = date_inspected1
self.inspID2 = inspections_id2
пожалуйста, посмотрите мой код, я получаю вывод, как и ожидалось, но когда в ответе есть только одни данные, я получаю сбой по второму индексу, потому что во втором индексе нет данных
, пожалуйста, кто-нибудь, помогите мне
Комментарии:
1. Я бы использовал
Codable
протокол для декодирования вашего JSON. Кроме того, хотите ли вы сохранить все свои ключи в виде строк или вы хотите, чтобы они были правильными целыми числами, датами и т.д.?
Ответ №1:
Добавьте безопасную проверку перед получением второго
if let sampleArray = sampleArray, sampleArray.count > 1 {
let secondDict = sampleArray[1]
let signature_name1 = secondDict["signature_name"].stringValue
let inspection_number1 = secondDict["inspection_number"].stringValue
let date_inspected1 = secondDict["date_inspected"].stringValue
let inspections_id2 = secondDict["inspections_id"].stringValue
self.lblSeconfInspName.text = signature_name1
self.lblSecondInspNumber.text = "#(inspection_number1)"
self.lblSecondInspDate.text = date_inspected1
self.inspID2 = inspections_id2
}
Комментарии:
1. Хорошо, позвольте мне проверить
2. Это должно сработать. Ключевым моментом здесь является проверка того, существует ли второй индекс вообще? Если это произойдет, перейдите к его извлечению. Чтобы быть в безопасности, я бы посоветовал вам применить ту же логику и для 1-го индекса.
Ответ №2:
Попробуйте эту функцию. Я попытался поместить важные моменты внутри кода.
func analysis() {
let rawData = data as! [String: Any] // Specify value type -> By doing this, you specify the type of value that is "JSON"
let arrayPreviousInspectionList = rawData["previous_inspection_list"] as! [[String: String]] // Getting "previous_inspection_list" and specifying its type -> it's list of [String: String]
if(arrayPreviousInspectionList.count >= 2) { // You must check the number of objects in the list
// first index
let firstInspection = arrayPreviousInspectionList[0]
let signature_name = firstInspection["signature_name"]!
let inspection_number = firstInspection["inspection_number"]!
let date_inspected = firstInspection["date_inspected"]!
let inspections_id = firstInspection["inspections_id"]!
self.lblFirstInspName.text = signature_name
self.lblInspNumber.text = "#(inspection_number)"
self.lblFirstInspDate.text = date_inspected
self.inspID1 = inspections_id
// second index
let secondInspection = arrayPreviousInspectionList[1]
let signature_name1 = secondInspection["signature_name"]!
let inspection_number1 = secondInspection["inspection_number"]!
let date_inspected1 = secondInspection["date_inspected"]!
let inspections_id2 = secondInspection["inspections_id"]!
self.lblSeconfInspName.text = signature_name1
self.lblSecondInspNumber.text = "#(inspection_number1)"
self.lblSecondInspDate.text = date_inspected1
self.inspID2 = inspections_id2
} else {
print("--- The number of inspections is less than 2")
}
}
Надеюсь, будет полезно. Также извините за мой английский.