SwiftUI:NavigationView視圖

NavigationView視圖是非常重要的視圖,您會一直使用它。 NavigationView { } 一旦將視圖包裝到NavigationView中,您可以使用navigationTitle()修改器為視圖添加標題: NavigationView { Text("Hello") .navigationTitle("Welcome") } 然而,最重要的好處是現在我們可以使視圖成為導航到其他視圖的鏈接。 首先,我們創建另一個視圖。您可以將它添加到相同的文件中,也可以添加到項目中的另一個文件中: struct ThanksView: View { var body: some View { Text("Thanks for checking out the app!") } } 然後,將“Hello” Text視圖包裝到NavigationLink視圖中,其中我們將目的地參數設置為ThanksView: NavigationView { NavigationLink(destination: ThanksView()) { Text("Hello") .navigationTitle("Welcome") } } 現在,許多事情正在自動進行:Hello文本變為藍色並可點擊: 一旦我們點擊它,我們將顯示ThanksView和返回原始視圖的鏈接。左上角按鈕中顯示的文本來自我們設置的navigationTitle修改器: 以下是示例中使用的完整代碼: import SwiftUI struct ThanksView: View { var body: some View { Text("Thanks for checking out the app!") } } struct ContentView: View { var body: some View { NavigationView { NavigationLink(destination: ThanksView()) { Text("Hello") ....

SwiftUI:列表視圖

**列表(List)**視圖是在SwiftUI中最常用的視圖之一。 List { } 在其內部,您可以放置一系列的視圖,例如Text: 看到了嗎?List識別出Text子視圖,並將其放在一行中。 您可以放置多個子視圖,每個List的子視圖將被放在自己的行中: 在列表中,您可以使用**Section(選項卡)**視圖將項目分組,就像這樣: List的listStyle()修飾符可以讓您自定義列表的外觀,包括: InsetGroupedListStyle InsetListStyle SidebarListStyle GroupedListStyle PlainListStyle 例如,這是InsetGroupedListStyle: List { //... }.listStyle(InsetGroupedListStyle()) 這是GroupedListStyle: List { //... }.listStyle(GroupedListStyle()) 這是SidebarListStyle:

SwiftUI:在Text視圖中格式化小數

當我們使用Slider視圖來選擇一個值時,我們必須使用Double值,這會引起一個問題,因為當將值顯示在Text視圖中時,數字34會顯示為34.000000,儘管我們使用了步長值1,這意味著我們只能在滑塊中選擇整數值: struct ContentView: View { @State private var age: Double = 0 var body: some View { Form { Slider(value: $age, in: 0...100, step: 1) Text("\(age)") } } } 讓我們看看如何格式化此值以顯示34。 在Text視圖中,當我們插入age的值時,我們可以提供一個額外的specifier參數。 這個specifier讓我們使用字符串格式specifier。你可以在Apple官方文檔中查看可用的選項。 在我們的例子中,我們可以使用%.0f: Text("\(age, specifier: "%.0f")") 看到了嗎?現在我們得到的是20而不是20.000000:

SwiftUI:堆疊和群組

沒有一個 SwiftUI 的應用程式除了 Hello World 之外只有一個視圖。 當你想要添加多個視圖時,你需要將它們添加到一個堆疊中。 有三種類型的堆疊: HStack 在 X 軸上對齊項目 VStack 在 Y 軸上對齊項目 ZStack 在 Z 軸上對齊項目 讓我們回到 Hello World 應用程式的程式碼: import SwiftUI struct ContentView: View { var body: some View { Text("Hello World") } } 要添加第二個 Text 視圖,我們不能這樣做: struct ContentView: View { var body: some View { Text("Hello World") Text("Hello again!") } } 而必須將這些視圖嵌入到堆疊中。 讓我們嘗試使用 VStack: struct ContentView: View { var body: some View { VStack { Text("Hello World") Text("Hello again!...

SwiftUI:條件性顯示視圖中的項目

在表單中,一個常見的操作是使用一個切換控制項,當切換被啟用時,顯示一些額外的選項。 你可以在設定應用中經常看到這種情況,例如啟用 Wi-Fi 時。 那麼,你該如何實現這個效果呢? 首先,創建一個帶有切換控制項的 Form 視圖: struct ContentView: View { @State private var enabled = false var body: some View { Form { Toggle("啟用?", isOn: $enabled) } } } 然後,將下面這段代碼添加到 Toggle 視圖後面: if enabled { Section { Text("只有在啟用時才顯示這段文字") } } 像這樣: struct ContentView: View { @State private var enabled = false var body: some View { Form { Toggle("啟用?", isOn: $enabled) if enabled { Section { Text("只有在啟用時才顯示這段文字") } } } } } 現在,當切換被禁用時,Text 視圖將不可見:...

SwiftUI:標籤視圖

標籤視圖在像是TabView這樣的視圖中使用,用於顯示圖示和文字。 您可以通過將文字標籤作為第一個參數傳遞,然後將另一個字符串傳遞給systemImage參數,該參數識別圖示。 像這樣: Label("Calendar", systemImage: "calendar") 這將是結果: 傳遞給systemImage參數的參數是SF Symbols圖示之一。

SwiftUI:警告訊息

在給用戶提供反饋的同時,有時也可以用來協助調試應用程序,最常見的方式之一就是使用警告訊息。 SwiftUI 提供了 .alert() 修飾符,我們可以根據某些條件來顯示警告。 讓我們從以下範例開始,其中有一個帶有計數器的 Button: import SwiftUI struct ContentView: View { @State var count = 0 var body: some View { Button("Count: \(count)") { self.count += 1 } .font(.title) } } 當 count 達到 10 時,我希望顯示一個警告訊息。 我們該如何做到這一點? 我可以在 ContentView 中添加一個名為 showAlert 的布爾屬性,並編輯 Button 的點按操作內容: struct ContentView: View { @State var count = 0 @State var showAlert = false var body: some View { Button("Count: \(count)") { self.count += 1 if self....

SwiftUI:屬性

您可以將任何屬性添加到任何 SwiftUI 視圖中,就像這樣: import SwiftUI struct ContentView: View { let name = "Flavio" var body: some View { Text("Hello, \(name)!") .font(.largeTitle) } } 您可以看到我使用了 let,因為該屬性是一個常量。 請注意,稍後我們將看到如何通過點擊按鈕來更新屬性值。 以下是另一個帶有整數變量的示例: import SwiftUI struct ContentView: View { let name = "Flavio" let age = 38 var body: some View { VStack { Text("Hello, \(name)!") .font(.largeTitle) Text("You are \(age) years old") } } }

Swift可選型别和`nil`

本教程屬於Swift系列 可選型别是Swift的一個重要特性。 當你不確定一個值是否存在,你可以將其聲明為可選型别。 可選型别將另一個值包裹在內,具有自己的型别。或者也可能不包裹值。 我們可以在型别後面加上一個問號來聲明一個可選型别,像這樣: var value: Int? = 10 現在value不是一個Int值,而是一個包裹了Int值的可選型别。 要查找可選型别是否包裹了值,你必須進行解包。 可以使用一個感嘆號來進行解包,像這樣: var value: Int? = 10 print(value!) //10 Swift方法常常返回可選型别。例如,Int型别的初始化器接受一個字符串,並返回一個Int可選型别: 這是因為它不知道這個字符串能否轉換為一個數字。 如果可選型别不包含值,則評估為nil,並且無法進行解包: nil是一個特殊的值,不能賦值給一個變數,只能賦值給可選型别: 通常在代碼中使用if語句來解包值,像這樣: var value: Int? = 2 if let age = value { print(age) }

Swift條件語句:`switch`

本教程屬於Swift系列教程 switch語句是一種方便的條件語句,用於處理多種情況: var name = "Roger" switch name { case "Roger": print("你好,Roger先生!") default: print("你好,\(name)") } 當一個case語句結束後,switch會自動退出。 在Swift中,switch語句需要包含所有的情況。如果變量name是一個可以有任何值的字符串,我們需要添加一個必須的default情況。 對於枚舉類型,你可以簡單地列舉所有的選項: enum Animal { case dog case cat } var animal: Animal = .dog switch animal { case .dog: print("你好,狗!") case .cat: print("你好,貓!") } 情況可以是一個區間: var age = 20 switch age { case 0..<18: print("你不能開車!") default: print("你可以開車") }