#4 調整文字屬性
圖形介面的 Text,和文字模式的主控台輸出 String,最大區別是什麼呢?應該就是 Text 可以調整不同的字型、字體、大小、顏色....等等,這些都是 Text 物件的屬性,在程式裡面該如何變更呢?
利用範例2-1a的句型,加上前面學過的 Unicode,再結合「Google 翻譯」網頁提供全世界100多種文字的翻譯,我們可以寫出相當豐富有趣的內容,以下我們有請 Google 小姐來翻譯「你愛我嗎?」
// 2-1d 你愛我嗎(Text)
// Created by Heman, 2021/08/03
import PlaygroundSupport
import SwiftUI
let 各國文字 = [
"Do you love me?",
"Est-ce que tu m'aimes?",
"តើអ្នកស្រលាញ់ខ្ញុំទេ?",
"私を愛していますか?",
"Ты любишь меня?",
"당신은 나를 사랑합니까?",
"എന്നെ ഇഷ്ടമാണോ?",
"Дали ме сакаш?",
"ትወጂኛለሽ?",
"Გიყვარვარ?",
"Bạn có yêu tôi không?",
"Դու սիրում ես ինձ?",
"אתה אוהב אותי?",
"هل تحبني؟",
"👩🦰💕🧑🦰?"]
var 國際版 = ""
for 字串 in 各國文字 {
國際版 = 國際版 + 字串 + "\n"
}
struct 你愛我嗎: View {
var body: some View {
Text(國際版)
.font(.largeTitle)
.foregroundColor(.blue)
}
}
print(國際版)
PlaygroundPage.current.setLiveView(你愛我嗎())
注意陣列「各國文字」倒數第3行以色列「希伯來文」與倒數第2行「阿拉伯文」,這兩種中東地區使用的文字是由右向左書寫,與西方文字方向相反。而最後一個表情符號是筆者添加,不是Google小姐翻譯的。
執行結果如下圖。

在此範例程式中,我們先用一個 for 迴圈將陣列裡面的字串連在一起,指定給「國際版」變數,這是第1單元的基礎知識。
var 國際版 = ""
for 字串 in 各國文字 {
國際版 = 國際版 + 字串 + "\n"
}
接下來在 View 結構裡面將「國際版」字串顯示出來,與2-1a同樣的寫法。
struct 你愛我嗎: View {
var body: some View {
Text(國際版)
.font(.largeTitle)
.foregroundColor(.blue)
}
}
不過這次的 Text() 物件有兩個調整屬性的函式,分別將字體設為大標、顏色為藍色:
Text(國際版)
.font(.largeTitle)
.foregroundColor(.blue)
這種可以調整物件自身屬性的方法(函式),我們特稱為物件的 "Modifier",或稱「修飾語」。通常修飾語的撰寫風格,就像這例子,一個修飾語單獨寫一行。
SwiftUI 每一個 View 物件,都有相關的修飾語,用以改變屬性,呈現不同的畫面風格,所以學習修飾語也是本單元的重點。
下表為 Text 的相關修飾語,大家可以自行實驗看看,每個修飾語 () 內的參數不盡相同,但Swift Playgrounds 都會有提示,按照提示去做就對了。
表2-1 Text 修飾語
| # |
Text 修飾語 |
說明 |
| 1 |
font() |
字型與大小 |
| 2 |
bold() |
粗體 |
| 3 |
italic() |
斜體 |
| 4 |
strikethrough() |
刪除線 |
| 5 |
underline() |
底線 |
| 6 |
tracking() |
字距 |
| 7 |
multilineTextAlignment() |
對齊方式 |
| 8 |
lineSpacing() |
行距 |
為什麼上表沒有提到 foregroundColor() 修飾語呢?因為這個是所有 View 通用的,我們在下一課詳細說明。
程式最後(倒數第二句),用 print() 輸出到主控台,在 Swift Playgrounds 中可以同時顯示圖形介面與主控台的內容。
通常在App 螢幕上,不會顯示主控台輸出的文字,因此,我們可以利用主控台當作 "debug" 用途,也就是說,即便是在圖形介面的程式中,我們也可以寫 print() 輸出一些文字,讓我們確認程式碼的正確性,不會影響到App的畫面。
筆者大多在 Mac mini 使用 Swift Playgrounds寫程式,這些程式會自動同步到 iCloud上面,所以也可用另一台 iPad 修改程式,如以下影片示範。