Я пытаюсь получить данные от 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?
Любой вклад будет принят с благодарностью!
Приветствия