Skip to content

iOS / SwiftUI

The ios() builder renders Swift code for SwiftUI. Output includes type-safe Color, CGFloat, Font.Weight, and more. Doc comments are generated from $description.

import { ios } from 'dispersa'
OptionTypeDefaultDescription
namestringUnique output identifier
filestring or functionOutput path (supports {*context*} interpolation for modifiers)
preset’standalone''standalone’Output preset
accessLevel’public’ | ‘internal''public’Swift access level
structure’enum’ | ‘grouped''enum’Code structure
enumNamestring’DesignTokens’Custom enum name (enum mode)
extensionNamespacestring’DesignTokens’Namespace enum name (grouped mode)
colorSpace’sRGB’ | ‘displayP3''sRGB’Color space for Color()
swiftVersion’5.9’ | ‘6.0''5.9’Swift version target
indentnumber4Spaces per indentation level
frozenbooleanfalse@frozen annotation for ABI stability
transformsTransform[]Per-output transforms
filtersFilter[]Per-output filters
public enum Tokens {
public enum Color {
public enum Brand {
/// Primary brand color
public static let primary = Color(.sRGB, red: 0, green: 0.4, blue: 0.8)
}
}
public enum Spacing {
public static let medium: CGFloat = 16
}
}
Token TypeSwift Type
colorColor
dimensionCGFloat
fontFamilyString
fontWeightFont.Weight
durationTimeInterval
numberDouble
shadowShadowStyle
cubicBezierUnitCurve
typographyTypographyStyle
borderBorderStyle
gradientGradient

Use displayP3 for wider gamut on capable devices:

ios({
name: 'tokens',
file: 'Tokens.swift',
colorSpace: 'displayP3',
})

Note: avoid using colorToHex() with displayP3 — hex colors are limited to the sRGB gamut, so the transform would negate the wider P3 gamut advantage.

When swiftVersion is '6.0', static properties use nonisolated(unsafe) for Swift 6 concurrency:

ios({
name: 'tokens',
file: 'Tokens.swift',
swiftVersion: '6.0',
})

Token $description values are emitted as Swift doc comments:

/// Primary brand color used for CTAs
public static let primary = Color(.sRGB, red: 0, green: 0.4, blue: 0.8)