Использование констант

August 26, 2025 · View on GitHub

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

Ключевые особенности

  • Доступ только для чтения: константы предоставляют доступ к изменяемому состоянию, но значения не могут быть изменены.
  • Ограничено приложением: как и Slice, Constant определяется в расширении Application и ограничен доступом к определенным частям состояния.
  • Потокобезопасность: Constant обеспечивает безопасный доступ к состоянию в многопоточных средах.

Пример использования

Определение константы в приложении

Вот как вы определяете Constant в расширении Application для доступа к значению только для чтения:

import AppState
import SwiftUI

struct ExampleValue {
    var username: String?
    var isLoading: Bool
    let value: String
    var mutableValue: String
}

extension Application {
    var exampleValue: State<ExampleValue> {
        state(
            initial: ExampleValue(
                username: "Leif",
                isLoading: false,
                value: "value",
                mutableValue: ""
            )
        )
    }
}

Доступ к константе в представлении SwiftUI

В представлении SwiftUI вы можете использовать обертку свойства @Constant для доступа к постоянному состоянию только для чтения:

import AppState
import SwiftUI

struct ExampleView: View {
    @Constant(\.exampleValue, \.value) var constantValue: String

    var body: some View {
        Text("Постоянное значение: \(constantValue)")
    }
}

Доступ только для чтения к изменяемому состоянию

Даже если значение изменяемо в другом месте, при доступе через @Constant значение становится неизменяемым:

import AppState
import SwiftUI

struct ExampleView: View {
    @Constant(\.exampleValue, \.mutableValue) var constantMutableValue: String

    var body: some View {
        Text("Изменяемое значение только для чтения: \(constantMutableValue)")
    }
}

Лучшие практики

  • Используйте для доступа только для чтения: используйте Constant для доступа к частям состояния, которые не должны изменяться в определенных контекстах, даже если они изменяемы в другом месте.
  • Потокобезопасность: как и другие компоненты AppState, Constant обеспечивает потокобезопасный доступ к состоянию.
  • Используйте OptionalConstant для необязательных значений: если часть состояния, к которой вы обращаетесь, может быть nil, используйте OptionalConstant для безопасной обработки отсутствия значения.

Заключение

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


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