在本章中,你将学会存储属性、计算属性及属性观察器的使用。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
我们新建一个SwiftUI
项目,命名为SwiftUIPorperty
。
属性的概念
属性,一般指的是基本的数据类型。
属性可以分为储存属性和计算属性。存储属性可以用于类和结构体中,不可以用于枚举,计算属性可以用在类、结构体、枚举。
储存属性
在Swift
的类和结构体中,属性可以用var声明的变量成员的属性,也可以是用let
声明的常量成员的属性。这样的直接读写赋值的属性,我们叫做储存属性。
比如我们需要定义一个结构体,用于减少代码使得编程更加优雅,示例:
//属性的声明 struct buttonView: View { //属性 var title: String var bgColor: Color var body: some View { Button(action: { // 操作 print("登录成功") }) { // 按钮样式 Text(title) .font(.system(size: 14)) .frame(minWidth: 0, maxWidth: .infinity) .padding() .foregroundColor(.white) .background(bgColor) .cornerRadius(5) .padding(.horizontal, 20) } } }
上述代码中,我们定义了一个buttonView
的结构体,它的实例中包含一个title
变量储存属性和bgColor
变量储存属性。它们存储着变量的类型和初始值,在使用时,我们需要给两个存储属性赋予对应属性类型的初始值。示例:
struct ContentView: View { var body: some View { VStack { buttonView(title: "微信登录", bgColor: Color(red: 88 / 255, green: 224 / 255, blue: 133 / 255)) buttonView(title: "Apple登录", bgColor: Color(red: 51 / 255, green: 51 / 255, blue: 51 / 255)) } } }
上述代码中,我们在使用buttonView
结构体的存储属性时,通过赋予属性类型的值的形式,在ContentView
结构体中展示了buttonView
结构体所涵盖的内容。
计算属性
另外,属性还有一种类型,叫做计算属性。
计算属性和储存属性不同,计算属性不存储值,和它的名称一样,只用来做计算,它只根据已有信息返回计算结果。由于计算属性没有值,如果我们要获得属性值,我们需要用到get
的方法来间接获得属性的值。示例:
//属性的声明 class nickName { var firstName = "文" var lastName = "雨" var allName: String { get{ return firstName + lastName } } }
上述代码中,我们定义了一个nickName
的结构体,它有两个成员变量firstName
、lastName
,我们给这两个变量赋予了初始值。
然后我们声明了一个String
类型的allName
变量,它的值是由get
获取到的firstName
和lastName
拼接得到的结果。
属性观察器
属性观察器是用来监控和响应初始化的属性值的变化。
属性观察器有两个重要的观察者:willSet观察者
、didSet观察者
,willSet
观察者会在该值被存储之前被调用,didSet
观察者会在一个新值被存储后被调用。
//属性观察器 class Calculator { var number: Int = 0 { willSet { print("存储中") } didSet { if number > oldValue { print("更改新的值存储") } } } }
上述代码中,我们定义了一个Calculator
结构体,然后声明了一个变量number
,它是Int
类型,初始值为0
。
然后我们使用了willSet
观察者和didSet
观察者,只要number
被调用了,就打印输出“存储中
”的文字。
如果我们重新给number
赋值了,我们就判断下number
赋值后新的值和oldValue
原本旧的值对比,就达到了我们赋了新值就打印输出“更改新的值存储
”文字。
以上就是本章的全部内容。
快来动手试试吧!