Привет, любители аниме и разработчики SwiftUI!

Сегодня мы собираемся создать забавное и простое в использовании аниме-приложение, которое будет отображать случайные цитаты из ваших любимых шоу с помощью API Animechan! 🚀

Приготовьтесь посмеяться над легкими аниме-шутками и насладитесь этим 5-минутным чтением. Давайте погрузимся и создадим наш собственный диспенсер аниме-цитатов! 😂

Начало работы: настройка проекта 🏁

Сначала создайте новый проект SwiftUI в Xcode и дайте ему подходящее имя — например, «AnimeQuotes» или «QuoteDōjō»! 🥋

Теперь давайте возьмем в свои руки эти сочные цитаты из аниме, используя API Animechan. Мы будем использовать две конечные точки:

  1. Случайная цитата: https://animechan.vercel.app/api/random
  2. Случайная цитата из определенного аниме: https://animechan.vercel.app/api/random/anime?title=naruto

Дополнительную информацию об API можно найти на странице https://animechan.vercel.app.

Нетворкинг как ниндзя 🐱‍👤

Пришло время создать сетевой уровень для получения котировок из API Animechan. Создадим класс QuoteAPI:

import Foundation

class QuoteAPI {
    let baseURL = "https://animechan.vercel.app/api"
    
    func getRandomQuote(completion: @escaping (AnimeQuote?) -> Void) {
        let urlString = "\(baseURL)/random"
        fetchData(urlString: urlString, completion: completion)
    }
    
    func getRandomQuote(fromAnime title: String, completion: @escaping (AnimeQuote?) -> Void) {
        let urlString = "\(baseURL)/random/anime?title=\(title)"
        fetchData(urlString: urlString, completion: completion)
    }
    
    private func fetchData(urlString: String, completion: @escaping (AnimeQuote?) -> Void) {
        guard let url = URL(string: urlString) else {
            completion(nil)
            return
        }
        
        URLSession.shared.dataTask(with: url) { data, response, error in
            if let data = data, error == nil {
                let quote = try? JSONDecoder().decode(AnimeQuote.self, from: data)
                completion(quote)
            } else {
                completion(nil)
            }
        }.resume()

Отлично, наш сетевой ниндзя готов к действию! 🌟

Чтобы узнать больше, ознакомьтесь с этими книгами на Amazon:

SwiftUI для вдохновителей

Руководство по выживанию инженеров

Создание пользовательского интерфейса: отображение цитат как босс 📱

Давайте создадим привлекательный пользовательский интерфейс для отображения котировок. Мы начнем с простого представления QuoteCard:

import SwiftUI

struct QuoteCard: View {
    let quote: AnimeQuote

    var body: some View {
        VStack(alignment: .leading, spacing: 10) {
            Text(quote.anime)
                .font(.title)
                .bold()
                .foregroundColor(.red)

            Text("\"\(quote.quote)\"")
                .font(.headline)
                .italic()

            Text("- \(quote.character)")
                .font(.subheadline)
                .fontWeight(.medium)
                .foregroundColor(.gray)
        }
        .padding()
        .background(Color(.systemGray6))
        .cornerRadius(10)
        .shadow(radius: 5)
    }
}

Теперь давайте создадим основной ContentView:

import SwiftUI

struct ContentView: View {
    @State private var quote: AnimeQuote?
    @State private var animeTitle: String = ""
    private let quoteAPI = QuoteAPI()

    var body: some View {
        VStack {
            TextField("Enter anime title", text: $animeTitle)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()

            if let quote = quote {
                QuoteCard(quote: quote)
            } else {
                Text("No quote yet")
                    .font(.headline)
                    .foregroundColor(.gray)
            }

            Spacer()

            Button(action: fetchRandomQuote) {
                Text("Get Random Quote")
                    .bold()
                    .padding()
                    .background(Color.red)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
        }
        .padding()
        .onAppear(perform: fetchRandomQuote)
    }

    private func fetchRandomQuote() {
        if animeTitle.isEmpty {
            quoteAPI.getRandomQuote { fetchedQuote in
                DispatchQueue.main.async {
                    self.quote = fetchedQuote
                }
            }
        } else {
            quoteAPI.getRandomQuote(fromAnime: animeTitle) { fetchedQuote in
                DispatchQueue.main.async {
                    self.quote = fetchedQuote
                }

Этот ContentView содержит текстовое поле для ввода пользователем названия аниме, отображает полученную цитату с помощью QuoteCard и имеет кнопку для получения новой цитаты. Наше приложение готово к работе! 🎉

Подведение итогов: экстраординарное аниме-приложение 🏆

Поздравляем! Вы успешно создали приложение SwiftUI для извлечения цитат из аниме, используя API Animechan! 🎊 Теперь ваше приложение наполнено мудростью (а иногда и весельем) от ваших любимых аниме-персонажей! 🤣

Чтобы узнать больше, ознакомьтесь с этими книгами на Amazon:

SwiftUI для вдохновителей

Руководство по выживанию инженеров

Так что давай, похлопай себя по плечу и поделись со всем миром своими новообретенными знаниями об аниме-цитатах! 🌍

Я являюсь партнером Amazon, и в этом сообщении есть партнерские ссылки. Это означает, что если вы совершите покупку после нажатия на одну из них, я могу получить комиссию.