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)
}
} ```