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

} ```