【Swift】テキストの一部だけ色を変える方法!AttributedString構造体の使い方

この記事からわかること

  • SwiftAttributedStringとは
  • テキスト一部分だけ変更する方法
  • 文字列属性操作する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

テキストの一部だけ色を変える方法

テキストの一部だけ色が変わっているビューを実装するにはAttributedString型を使用します。

var attributedString = AttributedString("Let's learn Swift and make an iOS app!\nLet's output Hello world right away!")
        
if let range = attributedString.range(of: "Hello world") {
    attributedString[range].foregroundColor = .cyan
}

ここではAttributedString型のテキストオブジェクトを生成し、rangeメソッドで変更したい文字列範囲を検索、その範囲にのみ文字色を反映させています。

例えばSwiftUIで表示させる場合は以下のようにします。またメソッドとして切り出しておくことで汎用性を持たせておきます。

import SwiftUI

struct ContentView: View {

    private func changeStringColor(_ text: String) -> AttributedString {
        var attributedString = AttributedString(text)
        
        if let range = attributedString.range(of: "Hello world") {
            attributedString[range].foregroundColor = .cyan
        }
        return attributedString
    }
    
    var body: some View {
        Text(changeStringColor("Let's learn Swift and make an iOS app!\nLet's output Hello world right away!"))
    }
}
【Swift】AttributedStringでテキストの一部だけ色を変える方法

AttributedString構造体とは?

公式リファレンス:AttributedString構造体

iOS15/macOS12以降から追加されたAttributedStringテキストに属性を付与させた状態の文字列を扱う構造体です。ここで言う属性とは、フォントや太字、サイズ、文字色、リンクなどといった文字を装飾するための属性のことを指します。

AttributedString構造体のイニシャライザの引数にString型の値を渡すとAttributedString型にキャストできます。

var str:String = "Hello World!!"
var attributedString = AttributedString(str)
print(type(of: attributedString)) // AttributedString

おすすめ記事:【Swift】Markdown記法にテキストを変換する方法!

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index