aws graphql @connection не возвращает массив, как ожидалось? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть модель graphql следующим образом (у пользователя может быть много сообщений 1: m)

type User @model {
  id: ID!
  fullName: String!
  emailAddress: String!
  posts: [Post] @connection(name: "UserPostConnection")
}

type Post @model {
  id: ID!
  text: String!
  user: User @connection(name: "UserPostConnection")
  createdAt: String
  updatedAt: String
}

Я пытаюсь вернуть все сообщения для определенного пользователя c, как показано ниже:

let queryInput = GetUserQuery(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549")

appSyncClient?.fetch(query: queryInput, cachePolicy: .fetchIgnoringCacheData) { (result, error) in
            print(result?.data?.getUser?.posts)
        }
}        

Однако результат не возвращает массив, он возвращает необязательный:

Optional(AWSStackSocial.GetUserQuery.Data.GetUser.Post(snapshot: ["__typename": Optional("ModelPostConnection"), "nextToken": nil]))

Я подтвердил, что а) пользователь существует, и б) сообщения также существуют .

Вкл. AWS:

query {
    getUser(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549") {
      id 
    posts {
      items {
        id
      }
    }
    }
}

Выход:

{
  "data": {
    "getUser": {
      "id": "879db4f2-1dad-47b9-b70d-8bca15bf2549",
      "posts": {
        "items": [
          {
            "id": "04c4b571-6e92-4745-9a40-1a67a9d49d77"
          },
          {
            "id": "0f44fe6e-4e15-4a8c-b591-555e8fa1f60e"
          },
          {
            "id": "60c18c40-fea3-4ff3-8b21-df6857703dd2"
          }
        ]
      }
    }
  }
}

1 Ответ

0 голосов
/ 02 апреля 2020

Все, что в вашей модели не имеет требуемого суффикса (!), по определению является необязательным, независимо от того, существует оно или нет. Вы должны остерегаться того, чтобы оно было nil, потому что оно определено так, что может быть nil. Если у вас есть модель, вы можете изменить те, которые требуются (я не предлагаю это!). В противном случае вам просто придется распаковывать вещи при их обработке.

guard let user = result?.data?.getUser, let posts = user.posts else { throw NoPostsError }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...