Site icon AppTractor

10 быстрых советов по повышению качества iOS-кода: часть 2

Вот еще 10 советов, которые вы можете использовать в своих iOS-проектах.

1. Составляйте интерфейсы из компонентов

Разбейте представления на более мелкие части, чтобы сделать их более читаемыми.

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

struct HomeView: View {
  var body: some View {
    VStack {
      headerView
      mainView
      footerView
    }
  }
}

// MARK: - UI Components
private extension HomeView {
  var headerView: some View {...}
  var mainView: some View {...}
  var footerView: some View {...}
}

2. Переиспользуйте стилизацию с помощью модификаторов представления

Если у вас есть пользовательские стили, которые повторяются во всем приложении, воспользуйтесь модификаторами представлений SwiftUI, чтобы сохранить код в одном месте.

struct TitleStyle: ViewModifier {
  func body(content: Content) -> some View {
    content
      .font(.system(size: 22, weight: .bold))
      .foregroundColor(Color.black)
  }
}

extension View {
  func titleStyle() -> some View {
    modifier(TitleStyle())
  }
}

struct HomeView: View {
  var body: some View {
    Text("Hello!")
      .titleStyle()
  }
}

3. Включите модульные тесты

Это один из самых недооцененных процессов, который значительно улучшит качество кода.

Добавляя в код новый фрагмент логики, подумайте, как вы обеспечите его корректность. Напишите модульные тесты и запустите их в работу. Впоследствии это сэкономит массу времени.

4. Обрабатывайте ошибки

Не бойтесь использовать throw. Это отличный способ обрабатывать ошибки без особых усилий.

enum NetworkError: Error {
  case fetching(Error)
}

func fetchData(from url: URL) throws -> Data {
  do {
    let data = try Data(contentsOf: url)
    return data
  } catch {
    throw NetworkError.fetching(error)
  }
}

func fetchProducts() throws -> [Product] {
  let productsURL = URL(string: "https:\\myapi.com/products")
  let data = try fetchData(from: productsURL)
  return try JSONDecoder().decode([Product].self, from: data)
}

do {
  let products = fetchProducts()
} catch NetworkError.serverError(let message) {
    print("Server error: \(message)")
} catch NetworkError.networkError(let error) {
    print("Network error: \(error.localizedDescription)")
} catch {
    print("An unknown error occurred: \(error)")
}

5. Документируйте код

Я твердо убежден, что лучшая документация — это автодокументированный код. Однако если вы разрабатываете сложный API или библиотеку, создание пользовательской документации поможет другим лучше понять интерфейсы вашего кода.

Добавить ее очень просто: достаточно дважды щелкнуть на нужной функции и нажать кнопку Add Documentation.

/// Create a new request with the information provided
/// ```swift
/// do {
///     let request = try createRequest(from: .signing)
/// } catch {
///     print(error)
/// }
/// ```
/// - Parameter endpoint: Endpoint to perform the request
/// - Returns: A URLRequest instance with the information provided in `endpoint`
func createRequest(from endpoint: ApiEndpoint) throws -> URLRequest {...}

6. Перечисления

Перечисления используются при необходимости моделирования состояний, опций или конфигураций. Они обеспечивают безопасный для типов и самодокументируемый способ представления данных.

Вы можете добиться большего, чем думаете.

enum AppTheme {
  case light
  case dark
  case custom(primaryColor: Color, backgroundColor: Color)
}

7. Core Data + SwiftUI

Если вы используете в своем приложении Core Data, то для получения данных непосредственно в представлении используйте обертку свойства @FetchRequest.

struct HomeView: View {
  @FetchRequest(sortDescriptors: [SortDescriptor(\.id, order: .reverse)])
  private var users: FetchedResults<User>

  var body: some View {  
    VStack {
      List(users) { user in
        Text(user.name ?? "Unknown")
      }
    }
  }
}

8. Руководство по стилю

Определите руководство по стилю для своей команды, чтобы обеспечить набор соглашений по программированию и лучших практик для поддержания согласованности в рамках проекта.

Руководство по стилю может включать такую информацию, как:

9. Инъекция зависимостей

Используйте ее для повышения модульности, сопровождаемости и тестируемости кода. DI продвигает принцип единой ответственности, побуждая компоненты фокусироваться на одной задаче.

10. Дизайн-система

Создайте систему дизайна для гибкого и многократно используемого управления всеми компонентами пользовательского интерфейса. Это поможет масштабировать приложение и адаптироваться к возможным изменениям в будущем.

Если вы никогда не создавали дизайн-систему, хорошей отправной точкой будет определение менеджера для шрифтов и текстов вашего приложения. Его можно объединить с пользовательскими модификаторами вида и создать визуальное представление, которое будет служить руководством к действию.

Источник

Exit mobile version