中学数学624513 views
高校物理161327 views
高校倫理1442459 views
ヒストリア292936 views
いろは3019021 views
小学理科720872 views
LaTeX963955 views
中学理科1632333 views
MathPython499435 views
雑学1473946 views
Help
Tools

English

SwiftUI Text と AttributedString

iOS 15 以降、SwiftUI の Text は AttributedString をサポートしています。これにより、文字列の一部分だけにスタイルを適用する処理がより柔軟に書けるようになりました。

AttributedString の基本

AttributedString を作成して Text に渡します。

var attributed = AttributedString("Hello, SwiftUI!")
attributed.foregroundColor = .blue
attributed.font = .title

Text(attributed)

部分的なスタイル適用

文字列の一部だけにスタイルを適用できます。

var text = AttributedString("重要なお知らせがあります")

if let range = text.range(of: "重要") {
    text[range].foregroundColor = .red
    text[range].font = .body.bold()
}

Text(text)

複数の範囲にスタイルを適用

var text = AttributedString("Swift は 速くて 安全 な言語です")

if let range = text.range(of: "速くて") {
    text[range].foregroundColor = .orange
}
if let range = text.range(of: "安全") {
    text[range].foregroundColor = .green
}

Text(text)

リンクを埋め込む

AttributedString ではリンクも設定できます。

var text = AttributedString("詳しくは公式サイトをご覧ください")

if let range = text.range(of: "公式サイト") {
    text[range].link = URL(string: "https://apple.com")
    text[range].foregroundColor = .blue
}

Text(text)

リンク部分はタップ可能になり、Safari などで開かれます。

下線や取り消し線

var text = AttributedString("下線と取り消し線のサンプル")

if let range = text.range(of: "下線") {
    text[range].underlineStyle = .single
}
if let range = text.range(of: "取り消し線") {
    text[range].strikethroughStyle = .single
    text[range].strikethroughColor = .red
}

Text(text)

AttributedString を使えば、Text の + 連結よりも複雑なスタイリングをコードで表現しやすくなります。