在程式設計中,String「字串」是最基本的資料類型之一,不管是輸出錯誤訊息用來除錯,或與使用者對話互動,甚至透過Siri發出語音,都必須借助「字串」,「字串操作」可說是程式設計必備的技巧。
對初學者來說,字串可以操作的方式,可能比想像中還要多樣,常見的字串操作包括:
過去我們最常用的就是兩個字串的「連結」,在Swift中用加號 + 就可以輕鬆連結兩個字串,其他操作則需要使用String的物件方法,例如 .sort() 或 .split() ... 等有數十種之多,未來需要時再以範例說明。
在去(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參數中: