Ошибка показывает, что строка инициализируется с нулевым аргументом, поэтому что-то не так с данными json или способом их декодирования.
Почему бы вам не выполнить развертывание поэтапно , а не один лайнер. Когда вы сталкиваетесь с неизвестной ошибкой, всегда лучше разбить процесс на небольшие куски, а затем проанализировать каждый в отдельности. Когда вы обнаружите, в чем ваша проблема, вы всегда можете go вернуться к одному вкладышу, применяя то, что вы узнали.
Это то, что я придумал (и протестировал), чтобы проиллюстрировать один из способов отладка в процессе постепенного JSON декодирования.
Учитывая необработанную строку json:
let rawString = """
{"statusCode":200,"message":"Success","data":[{"_id":"someid","isActive":true,"subcategories":[{"_id":"id","photo":"image/url/30973327066756228460065.png","services":[{"_id":"id","properties":[{"_id":"id","isMultiSelect":false,"responses":["1","2","3","4","5"],"other_name":"የክፍሎች ቁጥር","name":"Number of rooms"}],"other_name":"ጽዳት","name":"Cleaning"}],"other_name":"ጽዳት","name":"Cleaning","other_subcategory_label":"ጽዳት","subcategory_label":"Cleaning"}],"name":"Home Cleaning","__v":0,"other_name":"የቤት ጽዳት"}]}
"""
Мы можем постепенно декодировать, проверять и затем разворачивать значение имени в конце.
let parsedJson = JSON.init(parseJSON: rawString)
let verifiedDataJson = parsedJson["data"]
guard verifiedDataJson != JSON.null else {
return
}
let verifiedCollectionViewTagJson = verifiedDataJson[0]
guard verifiedCollectionViewTagJson != JSON.null else {
return
}
let verifiedSubCategoriesJson = verifiedCollectionViewTagJson["subcategories"]
guard verifiedSubCategoriesJson != JSON.null else {
return
}
let verifiedIndexPathRowJson = verifiedSubCategoriesJson[0]
guard verifiedIndexPathRowJson != JSON.null else {
return
}
guard let unwrappedNameValue = verifiedIndexPathRowJson["name"].string as String? else {
return
}