Swift实用小册09:存储属性、计算属性及属性观察器的使用

举报
文如秋雨 发表于 2022/08/30 12:47:25 2022/08/30
【摘要】 在本章中,你将学会存储属性、计算属性及属性观察器的使用。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。我们新建一个SwiftUI项目,命名为SwiftUIPorperty。属性的概念属性,一般指的是基本的数据类型。属性可以分为...
在本章中,你将学会存储属性、计算属性及属性观察器的使用。

前言


和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原本久的值对比,就达到了我们赋了新值就打印输出“更改新的值存储”。



以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。