Нет продуктов или категорий в ViewController в TableView в приложении iOS с API WooCommerceIOS

Программируем под IOS
Ответить
Anonymous
 Нет продуктов или категорий в ViewController в TableView в приложении iOS с API WooCommerce

Сообщение Anonymous »

Начинаю создавать iOS-приложение интернет-магазина с подключением к сайту на Woocommerce. Я хочу вставить в TableView продукты из Woocommerce через API.
Теперь я создаю приложение, симулятор запускает только белый пустой экран. В конечном результате я хочу запустить iOS-приложение с подключением к сайту на Woocommerce, но я создаю его шаг за шагом, и первым шагом сейчас я хочу сделать экран с товаром или категориями из этого магазина. Почему мое приложение для iOS показывает пустой экран, когда я пытаюсь отобразить продукты WooCommerce в TableView через API?
Совместными усилиями я поместил этот новый код в Product.swift, но не получил никакого результата:
Product.swift
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

// Модель продукта
struct Product: Codable {
let id: Int
let name: String
let price: String
let regular_price: String?
let sale_price: String?
let description: String?
let short_description: String?

// Игнорируем лишние поля из JSON
private enum CodingKeys: String, CodingKey {
case id, name, price, regular_price, sale_price, description, short_description
}
}

// Основной класс для работы с API
struct ProductFetcher {
static func main() {
fetchProducts(useMockData: false) // Переключите на `true` для теста
}

static func fetchProducts(useMockData: Bool) {
// 1. Проверяем URL
guard let url = URL(string: "https://wp-json/wc/v3") else {
print("Invalid URL")
return
}

// 2. Готовим авторизацию
let consumerKey = "ck_3125"
let consumerSecret = "cs_707ff6"
let loginString = "\(consumerKey):\(consumerSecret)"

guard let loginData = loginString.data(using: .utf8) else {
print("Failed to encode credentials")
return
}

let base64LoginString = loginData.base64EncodedString()

// 3. Формируем запрос
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

// 4. Выполняем запрос или используем mock-данные
if useMockData {
useMockDataToDecode()
} else {
performNetworkRequest(request)
}
}

// Функция для работы с mock-данными
static func useMockDataToDecode() {
let mockJSON = """
[
{
"id": 99,
"name": "Premium Coffee Mug",
"price": "15.99",
"regular_price": "15.99",
"sale_price": "",
"description": "A stylish coffee mug for everyday use.",
"short_description": "Pick 6."
}
]
"""

guard let mockData = mockJSON.data(using: .utf8) else {
print("Failed to create mock data")
return
}

do {
let products = try JSONDecoder().decode([Product].self, from: mockData)
print("Mock products: \(products)")
} catch {
print("Decoding error with mock data: \(error)")
}
}

// Функция для сетевого запроса
static func performNetworkRequest(_ request: URLRequest) {
let task = URLSession.shared.dataTask(with: request) { data, response, error in
// Обработка ошибки сети
if let error = error {
print("Network error: \(error.localizedDescription)")
return
}

// Проверка HTTP-статуса
guard let httpResponse = response as? HTTPURLResponse,
(200.. Void) {
let endpoint = "\(baseURL)/products"
let urlString = "\(endpoint)?consumer_key=\(consumerKey)&consumer_secret=\(consumerSecret)"

guard let url = URL(string: urlString) else {
completion(nil)
return
}

URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("Ошибка: \(error.localizedDescription)")
completion(nil)
return
}

guard let data = data else {
completion(nil)
return
}

do {
let products = try JSONDecoder().decode([Product].self, from: data)
completion(products)
} catch {
print("Ошибка декодирования: \(error.localizedDescription)")
completion(nil)
}
}.resume()
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... p-with-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»