Запрос данных из Shopify с помощью GraphQL в приложение ios. Xcode - SWIFT - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь получить данные от Shopify с помощью GraphQL. Я могу получить данные, указав идентификатор продукта и получив данные в форме Storefront.Product, однако мне нужно, чтобы они были в форме Storefront.ProductEdge.

Вот мой код:

final class ClientQuery {
    static func queryForProduct(id: String) -> Storefront.QueryRootQuery {
    let id = GraphQL.ID(rawValue: id)
    return Storefront.buildQuery { $0
        .node(id: id) { $0
            .onProduct() { $0
                .id()
                .title()
                .variants(first: 1){ $0
                    .edges() { $0
                        .node(){ $0
                            .availableForSale()
                            .priceV2(){ $0
                                .amount()
                            }
                        }
                    }
              }
                .description()
                .images( first: 1){ $0
                    .fragmentForStandardProductImage()

                }
            }
        }
    }
}//end of final class

.

final class Client{

@discardableResult
func fetchProduct(id: String, completion: @escaping (Storefront.Product?) -> Void) -> Task {
    let query = ClientQuery.queryForProduct(id: id)

     let task  = self.client.queryGraphWith(query) { (query, error) in
         error.debugPrint()

        if let product = query?.node as? Storefront.Product? {
        completion (product)
        }
        else {
        print("Failed to fetch Product: \(String(describing: error))")
        completion (nil)
            }
        }
     task.resume()
     return task
   }
  }
 }//end of final class

.

viewDidLoad(){
            Client.shared.fetchProduct(id: sku) { Product1 in
               guard let Product1 = Product1 else {
                   print("Failed to fetch Product")
                   return
             }    
  }

Этот код работает, и я могу получить определенные значения продукта, такие как заголовок и изображение. Однако я хочу получить данные типа Storefront.ProductEdge вместо Storefront.Product, чтобы улучшить отображение данных. Но когда я изменяю fetchProduct на:

   @discardableResult
func fetchProduct(id: String, completion: @escaping (Storefront.ProductEdge?) -> Void) -> Task {
    let query = ClientQuery.queryForProduct(id: id)

     let task  = self.client.queryGraphWith(query) { (query, error) in
         error.debugPrint()

        if let product = query?.node as? Storefront.ProductEdge? {
        completion (product)
        }
        else {
        print("Failed to fetch Product: \(String(describing: error))")
        completion (nil)
            }
        }
     task.resume()
     return task
}

.

Тогда я получаю "Failed to fetch Product: nil" и "Failed to fetch Product"

Что происходит? И как я могу вызвать данные о продукте как тип Storefront.ProductEdge?

Любой вклад будет принят с благодарностью!

Приветствия

...