在程式設計中,String「字串」是最基本的資料類型之一,不管是輸出錯誤訊息用來除錯,或與使用者對話互動,甚至透過Siri發出語音,都必須借助「字串」,「字串操作」可說是程式設計必備的技巧。

對初學者來說,字串可以操作的方式,可能比想像中還要多樣,常見的字串操作包括:

過去我們最常用的就是兩個字串的「連結」,在Swift中用加號 + 就可以輕鬆連結兩個字串,其他操作則需要使用String的物件方法,例如 .sort() 或 .split() ... 等有數十種之多,未來需要時再以範例說明。

IV-2a AttributedString

在去(2021)年,Swift 增加一個新的資料類型 AttributedString,中文可稱為「帶屬性字串」,這裡所謂的屬性(attributes),是指文字在SwiftUI視圖中的外觀屬性,包括字體大小、顏色、字距...等,可以視為String「字串」的衍生類型,注意Attributed是被動語態,譯為「帶屬性」。

帶屬性字串與一般字串的主要差別,在於帶屬性字串可個別設定某段文字或甚至某個字的外觀,以下範例4-2a用一串萬國碼(Unicode)符號(麻將牌的「東西南北」),利用AttributedString將其中「南」設為反白,再利用上一課學過的Animation.spring()動畫,做出彈簧伸縮的感覺。

// 4-2a 帶屬性文字 AttributedString
// Created by Heman, 2022/03/19
import PlaygroundSupport
import SwiftUI

let 訊息 = "🀀🀁🀂🀃"
var 帶屬性字串 = AttributedString(訊息)
if let 文字範圍 = 帶屬性字串.range(of: "🀁") {
    帶屬性字串[文字範圍].backgroundColor = .red
    帶屬性字串[文字範圍].foregroundColor = .white
}

struct 標題: View {
    @State var 長寬倍數 = CGSize(width: 1.0, height: 3.0)
    let 動畫效果 = Animation.spring(response: 1.0, dampingFraction: 0.2, blendDuration: 0)
    var body: some View {
        Text(帶屬性字串)
            .font(.system(size: 48))
            .padding()
            .scaleEffect(長寬倍數, anchor: .bottom)
            .background(Color.gray.opacity(0.2))
            .onAppear {
                withAnimation(動畫效果.repeatForever(autoreverses: false)) {
                    長寬倍數 = CGSize(width: 1.0, height: 1.0)
                }
            }
    }
}

PlaygroundPage.current.setLiveView(標題())

將一般字串轉換為帶屬性字串,最簡單的方法就是將字串帶入AttributedString參數中: