Swift年終大禮包送你了還不來!!!
開啟掘金成長之旅!這是我參與「掘金日新計劃 · 12 月更文挑戰」的第7天,點選檢視活動詳情
PS:已經更文7天
1.App protocol蘋果新的生命週期代理
Bye-bye AppDelegate
Bye Bye AppDelegate! SwiftUI App Life Cycle
蘋果棄用了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? 的意思就是可以在 String 和 nil 之間選擇,可以是 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內容輸入設定
例項
```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)
}
} ```