Передача развернутых значений в Text() завершается успешно, но Link() приводит к выводу «Неожиданно обнаружено ноль при IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Передача развернутых значений в Text() завершается успешно, но Link() приводит к выводу «Неожиданно обнаружено ноль при

Сообщение Anonymous »

Я разворачиваю значения из вызова API для отображения пользователю. Отображение этих значений в виде Text() работает, но когда я пытаюсь отобразить строковое значение с помощью Link(), я получаю сообщение об ошибке Неожиданно обнаружено ноль при развертывании необязательного значения.
Я полагаю, что это может произойти потому, что данные из вызова API еще не записаны в результат, где я храню структурированные данные JSON из моего вызова API. Но эта ошибка появляется только тогда, когда я пытаюсь отобразить Link(). Когда я передаю тот же путь в Text() вместо Link(), ошибки не возникает.
Я использую DispatchQueue и обработчик завершения в моем вызове API, который, по моему мнению, должен позволять вызову API и записи данных происходить в фоновом режиме, что, как я думал, поможет избежать подобных ошибок.

Код: Выделить всё

struct ResultView: View {

@State var result: NYTSearchResponse?

var body: some View {

VStack {

//These text results unwrap and display just fine
Text(result?.response.docs[0].headline.main ?? "")
Text(result?.response.docs[0].abstract ?? "")
Text(formatDate(from: result?.response.docs[0].pubDate ?? "")

// Error occurs on this line "Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"
Link("Read Article", destination: URL(string: "\(result?.response.docs[0].webURL! ?? "")")!)

}
.onAppear{
getData(from: formURL()) { (result) in
self.result = result
}
}
}
}
Вызов API с обработчиками завершения и DispatchQueue

Код: Выделить всё

func getData(from url: String, completion: @escaping (NYTSearchResponse) -> ()) {

let task = URLSession.shared.dataTask(with: URL(string: url)!, completionHandler: { data, response, error in

guard let data = data, error == nil else {
print("Error loading data")
return
}

do {
let result = try JSONDecoder().decode(NYTSearchResponse.self, from: data)
DispatchQueue.main.async {
completion(result)
}

} catch {
print(error)
}
})
task.resume()
}
Почему эта ошибка появляется только при попытке сформировать ссылки и как это обойти?

Подробнее здесь: https://stackoverflow.com/questions/666 ... unexpected
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»