Почему при таком использовании Alamofire ничего не найдено?

Я использую Alamofire для вызова на Yummly.com, который должен отправить мне массив с несколькими рецептами. При вызове API все работает нормально. Но когда я пытаюсь добавить эти несколько ответов в значение, с этим сообщением что-то не так:

valueNotFound(Swift.Int, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "matches", intValue: nil), _JSONKey(stringValue: "Index 5", intValue: 5), CodingKeys(stringValue: "totalTimeInSeconds", intValue: nil)], debugDescription: "Expected Int value but found null instead.", underlyingError: nil))

struct RecipeSearchResult: Decodable {
  let name: String?
  let ingredients: String?
  let image: URL?
  let rating: Int?
  let timer: Int?
}

struct SearchRecipesRoot: Decodable {
  let matches: [Matches]
}

struct Matches: Decodable {
  let recipeName: String
  let smallImageUrls: [URL]
  let ingredients: [String]
  let id: String
  let totalTimeInSeconds: Int
  let rating: Int
}

func searchRecipes(from userIngredients: String) {
    let urlSearchParameter = "&q=\(userIngredients)&requirePictures=true"
    let searchURL = URL(
      string: "https://api.yummly.com/v1/api/recipes?" + urlAPIParameter + urlSearchParameter)!

    Alamofire.request(searchURL, method: .get).responseJSON {
      (response) in
      guard response.result.isSuccess else {
        print("☠️ \(String(describing: response.result.error)) ☠️")
        return
      }
      do {
        let responseJSON = try JSONDecoder().decode(SearchRecipesRoot.self, from: response.data!)
        for result in responseJSON.matches {
          let recipiesSearchResult = RecipeSearchResult(
            name: result.recipeName,
            ingredients: result.ingredients.joined(separator: "\n"),
            image: result.smallImageUrls[0],
            rating: result.rating,
            timer: result.totalTimeInSeconds
          )
          print(recipiesSearchResult)
        }
      }
      catch {
        print(error)
      }
    }
  }

Это ответ JSON, который повторяется столько раз, сколько найдено рецептов:

{
    "criteria": {
        "q": "pasta tomatoes cheese salmon",
        "requirePictures": true,
        "allowedIngredient": null,
        "excludedIngredient": null
    },
    "matches": [
        {
            "imageUrlsBySize": {
                "90": "https://lh3.googleusercontent.com/7lLNUgFrzS0rHdWGYKhv4qnVg2mPkafkZzSqUWYrFCOJpV4xq_KwU5HuB8KGHdn40G-s-RQQISyaCyPdJWCxpA=s90-c"
            },
            "sourceDisplayName": "The Washington Post",
            "ingredients": [
                "dried pasta",
                "olive oil",
                "vidalia onion",
                "garlic",
                "tomatoes",
                "cream cheese",
                "smoked salmon",
                "freshly ground black pepper",
                "basil leaves",
                "parmesan cheese"
            ],
            "id": "Tomato-and-Smoked-Salmon-Pasta-2161877",
            "smallImageUrls": [
                "https://lh3.googleusercontent.com/R1P8lKMQZz__M77Pav5ptnX2gdzxqY1wj6xzIaxHNuFFT6xe3QQ5E-nxgEROOJ2S0GUjpNruHrsNk-c0G9fO=s90"
            ],
            "recipeName": "Tomato and Smoked Salmon Pasta",
            "totalTimeInSeconds": 2100,
            "attributes": {
                "course": [
                    "Main Dishes"
                ]
            },
            "flavors": {
                "piquant": 0,
                "meaty": 0.16666666666666666,
                "bitter": 0.3333333333333333,
                "sweet": 0.16666666666666666,
                "sour": 0.3333333333333333,
                "salty": 0.8333333333333334
            },
            "rating": 3
        },

Пожалуйста, редактировать ваш вопрос, чтобы включить ответ JSON, который вы получаете и который вызывает ошибку.

Dávid Pásztor 10.04.2019 17:19

Вы гарантированно получите все данные в своей структуре Matches из API? Если нет, сделайте его необязательным. Кажется, вы не получили totalTimeInSeconds хотя бы за один рецепт.

Don 10.04.2019 17:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
418
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема возникла из-за «таймера: result.totalTimeInSeconds», который в какой-то момент возвращается к нулю, из-за чего вызов API возвращается с результатом «ValueNotFound».

timer: result.totalTimeInSeconds ?? 0

Другие вопросы по теме