开启成长之旅!这是我参与「日新方案 12 月更文挑战」的第7天,点击检查活动概况
PS:现已更文7天
1.App protocol苹果新的生命周期代理
Bye-bye AppDelegate
Bye Bye AppDelegate! SwiftUI App Life Cycle
苹果弃用了Uikit的代理形式,用了全新的app protocol 来管理应用程序
2.Identifiable通用仅有识别码
遇到比较坑爹工作
- Identifiable 十分简单有用,首要效果便是作为一个目标的仅有标识
struct listForm: Identifiable {
var id:UUID = UUID()
var name: String
var imgae: String
}
- UUID(id) 是通用仅有识别码(Universally Unique Identifier)的缩写
- id 有必要是小写字母,这是写死的
navigationView用法:
注意⚠️,navigation的用法,navigationtitle是写在{ }里边的
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调集
{
"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以便咱们复用(便是重复运用)
struct dataList:Codable,Indentifiable{
var id:Int
var title :String
var subtitle :String
}
注:Codable 的引进简化了JSON 和 Swift 类型之间相互转换的难度,可以把 JSON 这种弱类型数据转换成代码中运用的强类型数据。 Identifiable 十分简单有用,首要效果便是作为一个目标的仅有标识
3.创立struct 用一个list 变量来存储上一个结构的笼统出来的东西(调集)
struct appData:Codable{
var list[dataList]
}
后边咱们会将json文件里的数据映射到list调集里边,而里边的特点咱们现已通过上一个struct把它给笼统出来。
4.接下来便是通过一个函数方法把json读取进来完成映射
9.AutoCapitalization
- 操控TextFiled内容输入设置
实例
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()-作为开关的逻辑
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)
}
}