【Swift】テキストの一部だけ色を変える方法!AttributedString構造体の使い方
この記事からわかること
- SwiftのAttributedStringとは
- テキストの一部分だけ色を変更する方法
- 文字列の属性を操作する方法
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!"))
}
}
AttributedString構造体とは?
iOS15/macOS12以降から追加されたAttributedString
はテキストに属性を付与させた状態の文字列を扱う構造体です。ここで言う属性とは、フォントや太字、サイズ、文字色、リンクなどといった文字を装飾するための属性のことを指します。
AttributedString構造体のイニシャライザの引数にString
型の値を渡すとAttributedString
型にキャストできます。
var str:String = "Hello World!!"
var attributedString = AttributedString(str)
print(type(of: attributedString)) // AttributedString
おすすめ記事:【Swift】Markdown記法にテキストを変換する方法!
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。