Перейти к содержимому

Артефакты iOS

Путь: dist/ios/Sources/LhUITokens/LhTokens.swift и LhDarkTokens.swift; при наличии токенов теней дополнительно генерируется LhShadow.swift

Каталог модуля: Sources/LhUITokens/ (соглашение о каталогах SwiftPM)

Идиома Swift для пространств имён без экземпляров: вложенные public enum + public static let:

import SwiftUI
import CoreGraphics
public enum LhTokens {
public enum Button {
public static let borderRadius = CGFloat(2) // Скругление кнопки следует за глобальным скруглением
public static let borderWidth = CGFloat(1)
public enum FontSize {
public static let large = CGFloat(16)
public static let medium = CGFloat(14)
}
public enum Height {
public static let medium = CGFloat(40) // Высота кнопки среднего размера (по умолчанию)
}
}
}
Путь токена Элемент Swift
button.height.medium LhTokens.Button.Height.medium
color.primary.default LhTokens.Color.Primary.default``
zIndex.modal LhTokens.ZIndex.modal

Если имя элемента совпадает с ключевым словом Swift, оно берётся в обратные апострофы, иначе артефакт не компилируется:

public enum Primary {
public static let `default` = SwiftUI.Color(red: 0.169, green: 0.298, blue: 0.486)
public static let `repeat` = ...
}

Экранирование применяется только к именам элементов — имена типов-перечислений проходят pascalCase (первая буква в верхнем регистре) и не сталкиваются с ключевыми словами. См. SWIFT_KEYWORDS и swiftMemberName() в ios.ts.

Тип токена Литерал Swift
Цвет (непрозрачный) SwiftUI.Color(red: 0.169, green: 0.298, blue: 0.486)
Цвет (полупрозрачный) То же + .opacity(0.400)
Размер CGFloat(40)
Проценты 0.500 // 50% (доля, пересчитывается от размера контейнера)
Длительность 0.200 // 0.2s (секунды) — анимации SwiftUI работают в секундах, преобразование на этапе сборки (миллисекунды ÷ 1000, 3 знака после запятой)
Безье (x1: 0.4, y1: 0, x2: 0.2, y2: 1) // Контрольные точки Безье, easing строится на стороне платформы
Тень LhShadow(color:opacity:radius:x:y:)
Число / строка Как есть / JSON.stringify

В SwiftUI нет типа составной тени, поэтому генерируется структура-носитель (статический шаблон, без содержимого токенов):

public struct LhShadow {
public let color: SwiftUI.Color
public let opacity: Double
public let radius: CGFloat
public let x: CGFloat
public let y: CGFloat
// memberwise init
}

Генерируется только при наличии токенов с type: shadow.

Отдельный public enum LhDarkTokens:

public enum LhDarkTokens {
public enum Color {
public static let focus = SwiftUI.Color(red: 0.498, green: 0.651, blue: 0.851)
public static let selected = SwiftUI.Color(red: 0.694, green: 0.757, blue: 0.847)
// …остальные переопределённые ключи
}
}

Непереопределённые ключи в тёмной теме наследуются из LhTokens.

Репозиторий iOS подключает dist/ios/ через SPM как локальную path-зависимость или использует уже опубликованный пакет; для применения достаточно import LhUITokens.

Copyright © 2024-2026 FengMo WenXue