---
title: "SwiftUI"
description: "通过 Swift Package Manager 把 Tanrei 添加到 iOS 或 macOS 应用中。"
url: "https://tanrei.chnotchy.com/zh-cn/getting-started/swiftui/"
last_updated: 2026-10-20T01:38:40.000Z
---

# SwiftUI

> 通过 Swift Package Manager 把 Tanrei 添加到 iOS 或 macOS 应用中。

Swift 包 `Tanrei` 提供 SwiftUI 视图、主题环境和生成的令牌常量。它支持 iOS 17 和 macOS 14 及更高版本，并按 Swift 6 语言模式编写。

> [!WARNING]
> **尚未发布**
>
> `Tanrei` 尚未发布到 Swift Package Manager。一个平台在跟上当前的规格之后才会发布，在此之前 SwiftUI 的 CI 处于暂停状态。下文“从源码”一节展示如何从 [chnotchy/tanrei](https://github.com/chnotchy/tanrei) 添加这个包；“发布之后”一节展示届时的安装方式。

## 安装

### 从源码

> [!WARNING]
> **目前无法构建**
>
> SwiftUI 包尚未跟上当前的规格和令牌：它的源码是针对较早版本的生成令牌代码编写的，无法与现在的令牌代码一起编译。在它跟上之前，它的 CI 处于暂停状态，[状态页面](https://tanrei.chnotchy.com/zh-cn/status/)把它的组件标记为“待跟进”。下面的步骤说明如何把它添加到应用中；等这个包跟上之后，这些步骤就能用了。

把仓库克隆到你的应用旁边，再把这个克隆添加为本地包：在 Xcode 中选择 **File → Add Package Dependencies… → Add Local…**，然后选择包含 `Package.swift` 的文件夹；或者写在你自己的 `Package.swift` 中：

```swift
dependencies: [
  .package(path: "../tanrei")
],
targets: [
  .target(name: "App", dependencies: [.product(name: "Tanrei", package: "tanrei")])
]
```

使用 `.package(url: "https://github.com/chnotchy/tanrei", branch: "main")`，就会跟随仓库，而不是本地的克隆。

### 发布之后

在 Xcode 中选择 **File → Add Package Dependencies…** 并输入仓库的 URL，或者把它添加到 `Package.swift`：

```swift
dependencies: [
  .package(url: "https://github.com/chnotchy/tanrei", from: "<version>")
],
targets: [
  .target(name: "App", dependencies: [.product(name: "Tanrei", package: "tanrei")])
]
```

包清单位于仓库根目录，因为 Swift Package Manager 从那里解析 Git 依赖。Swift 的发布版本将使用不带前缀的语义化版本标签。

## 使用

```swift
import SwiftUI
import Tanrei

struct DeployView: View {
  @State private var isDeploying = false

  var body: some View {
    TanreiButton("部署", variant: .filled, action: { isDeploying = true })
      .disabled(isDeploying)
  }
}
```

`action:` 对应规格中的 `click`；尾随闭包则是 `icon:` 插槽（`TanreiButton("部署", action: deploy) { Image(systemName: "arrow.up") }`）。没有 `disabled` 参数。Tanrei 遵循 SwiftUI 自身的 `.disabled(_:)` 环境，因此禁用一个容器就会禁用其中的按钮，与系统控件的行为一致。

## 主题与对比度

默认情况下，Tanrei 跟随系统的配色方案和“**增强对比度**”这项辅助功能设置。两者都可以用主题修饰符覆盖：

```swift
ContentView()
  .tanreiTheme(TanreiTheme(appearance: .dark, contrast: .high))
```

## 字体

如果应用注册了相应的字体，字阶会使用 Inter（日文使用 Noto Sans JP，代码使用 Roboto Mono），否则回退到系统字体。文本样式按层级命名，位于环境中的系统对象上（`@Environment(\.tanreiSystem) private var system`）：章节标题用 `.tanreiTextStyle(system.typescale.heading2)`，连续文本用 `system.typescale.body`，控件用 `system.typescale.label`。它们会随动态字体（Dynamic Type）缩放；`.tanreiTextStyle(system.typescale.heading1, emphasized: true)` 会在字重上加上标题系列的强调级差。圆角遵循 `system.shape.cornerSmoothing`：为 0 时是 `.circular`，大于 0 的任何值都使用操作系统的 `.continuous` 圆角。
