Swift年終大禮包送你了還不來!!!

語言: CN / TW / HK

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 12 月更文挑戰」的第7天,點選檢視活動詳情

PS:已經更文7天

1.App protocol蘋果新的生命週期代理

Bye-bye AppDelegate

Bye Bye AppDelegate! SwiftUI App Life Cycle

app protocol 蘋果棄用了Uikit的代理模式,用了全新的app protocol 來管理應用程式

2.Identifiable通用唯一識別碼


遇到比較坑爹事情

  • Identifiable 非常簡單實用,主要作用就是作為一個物件的唯一標識 ```swift struct listForm: Identifiable {
var id:UUID = UUID()

var name: String

var imgae: String

} ```

  • UUID(id) 是通用唯一識別碼(Universally Unique Identifier)的縮寫
  • id 必須是小寫字母,這是寫死的

navigationView用法:


注意⚠️,navigation的用法,navigationtitle是寫在{ }裡面的 ```swift NavigationView{

    .navigationTitle(Text("待辦清單"))

    }

```

3.foreach用法:

  • rangle用法
  • id與hashable
  • identifiable與UUID
    • UUID(id) 是通用唯一識別碼(Universally Unique Identifier)的縮寫
    • Identifiable 非常簡單實用,主要作用就是作為一個物件的唯一標識

4.關於定義變數var和let的區別

let: 用於宣告+不變數 var :用於宣告+變數 不變數的值一旦被定義了就不能再改變。變數則可以在聲明後隨意賦值

5. guard...else...的用法

guard...else 的用法和 if...else的用法相似 - guard不需要執行滿足條件的閉包,但必須要在閉包必須要有中斷當前流程的語句。 - if...else,要執行滿足條件中的內容

閉包:就是圈在{ }中的內容

這裡有更加詳細的關於guard...else 和 if...else的小結 guard 和 if...else

6.try?的使用

如果不想處理異常則可以選擇這個關鍵字,使用這個關鍵字可以返回一個可選值型別,如果有一場出來,則返回nil,如果沒有異常則返回可以選值。

var name: String? = nil

和string不同,string?,既可以為string,也可以為nil

在 swift 中 nil 是和其他型別嚴格區分的。改為可選型即可,可選型,就是可以選擇,比如 String? 的意思就是可以在 Stringnil 之間選擇,可以是 String 也可以是 nil 。如果一個變數定義成 String,那麼這個變數就會是 String 型別,而不可能是nil。

小結 try try? try!的用法

  • try 出現異常就處理異常
  • try?出現異常不處理異常,返回nil,沒有出現就返回可以選型別
  • try!出現異常就中斷程式

7.MVVM模式

思維導圖 注:modelview實現具體的業務邏輯

8 json資料的讀取

1.建立一個list.json集合

```swift { "list":[

{
    "id":1,
    "title":"高數",
    "subtitle":"基礎課程"

},

{
    "id":2,
    "title":"線性代數",
    "subtitle":"基礎課程"

},

{
    "id":3,
    "title":"計算機",
    "subtitle":"專業課程"        
}

]

} ``` ⚠️⚠️⚠️!!! *json檔案中不能存在其它無關的東西比如,我們用swift建立json檔案時候,自動為我們生成的檔案註釋 // 否則將無法讀書json檔案 例如 例如:* 這個是能存在的,我之前在寫這個檔案的時候,提示我一直報錯就是因為我以為這個註釋在json檔案是生效的。

  • 2.用struct 抽象 出list集合裡的屬性

比如我們上一個list集合裡有:

  • id
  • title
  • subtitle(二級標題)

我們對其抽象成struct以便我們複用(就是重複使用)

swift struct dataList:Codable,Indentifiable{ var id:Int var title :String var subtitle :String } 注:Codable 的引入簡化了JSON 和 Swift 型別之間相互轉換的難度,能夠把 JSON 這種弱型別資料轉換成程式碼中使用的強型別資料。 Identifiable 非常簡單實用,主要作用就是作為一個物件的唯一標識

3.建立struct 用一個list 變數來儲存上一個結構的抽象出來的東西(集合)

```swift struct appData:Codable{

var list[dataList]

} ``` 後面我們會將json檔案裡的資料對映到list集合裡面,而裡面的屬性我們已經通過上一個struct把它給抽象出來。

4.接下來就是通過一個函式方法把json讀取進來完成對映

9.AutoCapitalization

  • 控制TextFiled內容輸入設定 input

例項

```swift import SwiftUI

struct ContentView: View {

@State var str1:String=""
@State var str2:String=""
@State var str3:String=""

var body: some View {

    VStack{
        TextField("單詞首字母自動大寫",text: self.$str1)
            .padding()
            .textFieldStyle(DefaultTextFieldStyle())
            .textInputAutocapitalization(.words)
            .border(Color.blue, width: 2)
            .padding()
        TextField("所有字母自動大寫",text: self.$str2)
            .padding()
            .textFieldStyle(DefaultTextFieldStyle())
            .textInputAutocapitalization(.characters)
            .border(Color.blue, width: 2)
            .padding()
        TextField("不能輸入大寫",text: self.$str3)
            .padding()
            .textFieldStyle(DefaultTextFieldStyle())
            .textInputAutocapitalization(.never)

            .border(Color.blue, width: 2)
            .padding()

    }
}

} ``` 執行結果: 在這裡插入圖片描述

在這裡插入圖片描述

10.navigationView用法

製作導航欄

toggle()-作為開關的邏輯

在這裡插入圖片描述

```swift import SwiftUI

struct ContentView: View { @State private var setColor: Bool = false @State private var setBold: Bool = false var body: some View { NavigationView {

        VStack {
            Text("iotessay.com")
                .foregroundColor(self.setColor ? Color.red : Color.blue)
            Text("Welcome to my web")
                 .foregroundColor(self.setColor ? Color.gray : Color.blue)



        }
        .padding(20)
        .font(self.setBold ? .largeTitle : .body)
        .border(Color.red, width: 3)

        .navigationBarTitle("Main", displayMode:.inline)
        .navigationBarItems(leading: Button(action: {
            self.setBold.toggle()
        }, label: {
            Text("改變字型")
        }), trailing: Button(action: {
            self.setColor.toggle()
        }, label: {
            Text("改變顏色")
        }))
    }
    .border(Color.gray, width: 2)
}

} ```