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

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

image.png

在本章中,你将学会存储属性、计算属性及属性观察器的使用。


前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。


如有错误,以你为准。


我们新建一个SwiftUI项目,命名为SwiftUIPorperty

image.png

属性的概念


属性,一般指的是基本的数据类型。

属性可以分为储存属性计算属性。存储属性可以用于类和结构体中,不可以用于枚举,计算属性可以用在类、结构体、枚举。


储存属性


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结构体所涵盖的内容。


image.png

计算属性


另外,属性还有一种类型,叫做计算属性。

计算属性和储存属性不同,计算属性不存储值,和它的名称一样,只用来做计算,它只根据已有信息返回计算结果。由于计算属性没有值,如果我们要获得属性值,我们需要用到get的方法来间接获得属性的值。示例:


//属性的声明
class nickName {
    var firstName = "文"
    var lastName = "雨"
    var allName: String {
        get{
            return firstName + lastName
        }
    }
}


上述代码中,我们定义了一个nickName的结构体,它有两个成员变量firstNamelastName,我们给这两个变量赋予了初始值。

然后我们声明了一个String类型的allName变量,它的值是由get获取到的firstNamelastName拼接得到的结果。


属性观察器


属性观察器是用来监控和响应初始化的属性值的变化。

属性观察器有两个重要的观察者: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原本旧的值对比,就达到了我们赋了新值就打印输出“更改新的值存储”文字。

image.png

以上就是本章的全部内容。

快来动手试试吧!

相关文章
|
2月前
|
存储 监控 Swift
Swift 属性
10月更文挑战第29天
34 2
|
7月前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
233 4
Swift开发——属性检查器
|
7月前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
51 0
Swift开发——存储属性与计算属性
|
8月前
|
安全 Swift iOS开发
【Swift开发专栏】Swift中的属性观察者与KVO
【4月更文挑战第30天】Swift编程语言支持属性观察者(`willSet`和`didSet`)和键值观察(KVO)来响应属性变化。属性观察者在设置前(`willSet`)和设置后(`didSet`)执行代码,可用于数据绑定。KVO是Cocoa/Cocoa Touch中的机制,需`NSObject`子类和`@objc dynamic`属性配合使用。注意在观察者销毁前移除观察,以避免内存问题。示例展示了属性观察者实现简单数据绑定。
122 1
|
8月前
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
107 1
|
存储 Swift
Swift属性包装器@propertyWrapper
Swift属性包装器@propertyWrapper
142 0
《从零开始学Swift》学习笔记(Day 33)——属性观察者
<span style="font-family:宋体;font-size: 14pt; mso-ascii-font-family: Arial; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Arial; mso-bidi-font-family: Ari
1212 0
|
6月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
215 3
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
58 2