iOS 生成物
パス:dist/ios/Sources/LhUITokens/LhTokens.swift と LhDarkTokens.swift。投影トークンが存在する場合は LhShadow.swift を追加生成
モジュールディレクトリ:Sources/LhUITokens/(SwiftPM のディレクトリ慣例)
Swift のインスタンスを持たない名前空間のイディオム:ネストした public enum + public static let:
import SwiftUIimport 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) // 中サイズのボタンの高さ(デフォルト) } }}命名マッピング
Section titled “命名マッピング”| トークンパス | Swift メンバー |
|---|---|
button.height.medium |
LhTokens.Button.Height.medium |
color.primary.default |
LhTokens.Color.Primary.default`` |
zIndex.modal |
LhTokens.ZIndex.modal |
キーワードのエスケープ
Section titled “キーワードのエスケープ”メンバー名が Swift のキーワードと同形の場合はバッククォートを付けます。そうしないと生成物がコンパイルできません:
public enum Primary { public static let `default` = SwiftUI.Color(red: 0.169, green: 0.298, blue: 0.486) public static let `repeat` = ...}エスケープが作用するのはメンバー名だけです——列挙型の型名は pascalCase(先頭を大文字)を通るのでキーワードに衝突しません。ios.ts の SWIFT_KEYWORDS と swiftMemberName() を参照してください。
単位とリテラル
Section titled “単位とリテラル”| トークン型 | 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 |
LhShadow.swift
Section titled “LhShadow.swift”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 リポジトリは SPM で dist/ios/ をローカル path 依存または公開済みパッケージとして取り込み、import LhUITokens ですぐ使えます。
Copyright © 2024-2026 FengMo WenXue