开启成长之旅!这是我参与「日新方案 12 月更文挑战」的第7天,点击检查活动概况

PS:现已更文7天

1.App protocol苹果新的生命周期代理

Bye-bye AppDelegate

Bye Bye AppDelegate! SwiftUI App Life Cycle

Swift年终大礼包送你了还不来!!!
苹果弃用了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? 的意思便是可以在 Stringnil 之间挑选,可以是 String 也可以是 nil 。假如一个变量界说成 String,那么这个变量就会是 String 类型,而不可能是nil。

小结 try try? try!的用法

  • try 出现反常就处理反常
  • try?出现反常不处理反常,回来nil,没有出现就回来可以选类型
  • try!出现反常就中止程序

7.MVVM形式

Swift年终大礼包送你了还不来!!!
注:modelview实现具体的事务逻辑

8 json数据的读取

1.创立一个list.json调集

{
    "list":[
    {
        "id":1,
        "title":"高数",
        "subtitle":"根底课程"
    },
    {
        "id":2,
        "title":"线性代数",
        "subtitle":"根底课程"
    },
    {
        "id":3,
        "title":"计算机",
        "subtitle":"专业课程"        
    }
    ]
}

⚠️⚠️⚠️!!! json文件中不能存在其它无关的东西比方,咱们用swift创立json文件时候,主动为咱们生成的文件注释 // 否则将无法读书json文件

Swift年终大礼包送你了还不来!!!
例如: 这个是能存在的,我之前在写这个文件的时候,提示我一向报错便是由于我认为这个注释在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内容输入设置
    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()
        }
    }
}

运转成果:

Swift年终大礼包送你了还不来!!!

Swift年终大礼包送你了还不来!!!

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