Привет, я использую API для вызова с сервера списка требований, называемых требованиями доступности, прежде чем приложение будет подключено к сети. Однако, когда требования доступности имеют значение null, это приводит к сбою приложения.
Я попытался написать код ниже с моим исправлением. . Могут быть и другие способы написать это, но я надеялся использовать только сериализацию JSON. Я проверил форумы, и большинство из них имеют более старый код.
let rquirements = company.availabilityRequirements
if rquirements != nil {
let data = rquirements?.data(using: .utf8)!
do {
if let jsonArray = try JSONSerialization.jsonObject(with: data!, options : .allowFragments) as? [Dictionary<String,Any>]
{
print(jsonArray) //using the json here
for requirements in jsonArray {
let hist = AvailabilityRequirements(data: requirements)
availabitlityReqirements.append(hist)
}
} else { //where our error happens if nil
print("Bad JSON Cannot Convert Value")
return
}
} catch let error as NSError {
print(error)
return
}
for requirement in availabitlityReqirements {
if requirement.required == 1{
requirementItems.append(requirement.displayName)
}
}
Я пытаюсь исправить быструю ошибку, если в требованиях доступности есть пустые или отсутствующие данные. Я надеялся, что если что-то, что я сделал, решило проблему, в противном случае мне было интересно, может ли кто-нибудь помочь мне не разбить мое приложение, если я получу ноль. Спасибо
Это NSobject, который содержит строгие параметры для имени, отображаемого имени, обязательного и типа.
Итак, в этом методе есть строка, вызывающая сбой из-за нуля, не так ли?
Вы должны использовать try?
, чтобы избежать ошибки. Весь код может быть:
if let rquirements = company.availabilityRequirements,
let data = rquirements.data(using: .utf8) {
do {
if let jsonArray = try? JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [String: Any] {
print(jsonArray)
for requirements in jsonArray {
let hist = AvailabilityRequirements(data: requirements)
availabitlityReqirements.append(hist)
}
}
} catch let error as Error {
print(error)
return
}
for requirement in availabitlityReqirements {
if requirement.required == 1 {
requirementItems.append(requirement.displayName)
}
}
}
Что такое
AvailabilityRequirements(data:)
?