Я полагаю, что это может произойти потому, что данные из вызова 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
}
}
}
}
Код: Выделить всё
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