在本章中,你将学会Class
类的Struct
结构体的使用。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
我们新建一个SwiftUI
项目,命名为SwiftUIClass
。
类的创建
类,是对一件事物的抽象。
类是对储存的实际数据的引用,本质上是一种数据类型。
在Swift
开发中,我们经常会把某个具有一定联系的成员值放在一个类中,示例:
//类的创建 class appInformation { var appName:String = "Swift实用小册" var appversion:String = "1.0.0" var appAuthor:String = "文如秋雨" }
上述代码中,我们定义了一个appInformation
类,用来描述app
的基本信息,它包含3
个可变的属性:appName、appversion、appAuthor
,我们赋予了这3
个属性的类型和初始值,我们也可以不用声明类型,Swift
可以根据初始值自动判断其类型。
类的使用
在我们定义好类之后,在业务代码中我们调用类并访问它的成员属性,我们需要先实例化
类,由于类有自己的访问方式
,因此我们可以直接访问类的属性。示例:
//类的使用 let appMessage = appInformation() //实例化 VStack(spacing: 20) { Text(appMessage.appName) .font(.largeTitle) .foregroundColor(.blue) Text(appMessage.appversion) .font(.title3) .foregroundColor(.gray) Text(appMessage.appAuthor) .font(.title3) .foregroundColor(.gray) }
上述代码中,我们用构造器语法来实例化了appInformation
类,然后在业务代码中,使用【实例化名称+属性名称
】的方式来访问类的属性。
由于我们定义的appInformation
类中的成员值是变量,我们也可以在实际使用过程中重新赋值,也就是我们可以更新appInformation
类的成员值的初始值。
结构体的创建
结构体,是Swift
的一个新特征,是对一个结构的抽象,它只是用于表示一种数据结构。
在Swift
中,所有的基本类型:整数(Integer
)、浮点数(floating-point
)、布尔值(Boolean
)、字符串(string
)、数组(array
)和字典(dictionary
)在底层都是以结构体的形式所实现。
//结构体的创建 struct Constants { var homeViewName = "模版" var mineViewName = "我的" }
上述代码中,我们定义了一个Constants
结构体,它有2
个常量成员值:homeViewName、mineViewName
,我们赋予了成员属性的初始值。
结构体的使用
结构体和类的概念和用法很相似,结构体的主要目的是用来封装少量相关的数据值。示例:
//结构体的使用 let constants = Constants() //实例化 HStack(spacing: 20) { Text(constants.homeViewName) .font(.largeTitle) .foregroundColor(.blue) Text(constants.mineViewName) .font(.title3) .foregroundColor(.gray) }
在类中,我们是直接引用类和访问类的值,这样在我们在实际业务中可以更新类中成员值。这样很容易出现一个问题是,我们协作时,有人给类重新赋值了,那么app
中所有用到这个类的地方就会更新相应的成员值。这样有时候我们只想在某个地方单独修改就比较麻烦了。
而结构体不同,结构体内的属性不能继承,也就是说我们实例化的时候,只是将结构体的成员值“复制
”过来,而不是直接引用,那我们更改赋值的时候,只会在我们实例化的参数对应的地方进行更新。
类和结构体如何选择
Swift
更加推荐值类型变量(struct
)而不是引用类型(class
)的变量,因为类每次都引用时都会消耗拷贝资源,而结构体比较好的是每次实例化的时候,都是复制值对象出来,而且也不会影响其他地方的时候。
以上就是本章的全部内容。
快来动手试试吧!