《Swift学习笔记》12 - 类和结构体的简单介绍
介绍:Swift 语言由苹果公司在 2014 年推出,用来撰写 Mac OS 和 iOS 应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org
目前Swift已经发展到了第五版本。显然苹果大有推翻 OC “江山”的意思.
今天就来初探一下Swift,看看究竟为何swift有这么大的能力。
参考内容:
Swift中文
YungFan老师

一、结构体的简单介绍
- 结构体是值类型:当它被指定到常量或者变量,或者被传递给函数时会被拷贝的类型(
Swift 中所有的基本类型——整数,浮点数,布尔量,字符串,数组和字典——都是值类型,并且都以结构体的形式在后台实现。
) - 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合
- 结构体既可以定义属性又可以定义方法
1. 结构体的定义
- 定义语法: Swift中用
struct
关键字定义类
struct 结构体名称 {
// 属性和方法
}
- 举例
struct structName {
var width = 0.0
var height = 0.0
func structFunc() {
print("structFunc1")
}
}
2. 结构体的初始化
//结构体的实例化对象
let someStructName = structName()
3. 结构体成员初始化器
// 结构体成员初始化器
var someStructName1 = structName(width: 10, height: 10)
4. 访问属性
//访问属性
print(someStructName, someStructName.width, someStructName.height)
someStructName.structFunc()
5. 修改变量属性
someStructName1.width = 12.0
someStructName1.height = 13.0
print(someStructName1, someStructName1.width, someStructName1.height)
6. 结构体和枚举是值类型
这意味着你所创建的任何结构体和枚举实例——和实例作为属性所包含的任意值类型——在代码传递中总是被拷贝的。
再次声明: Swift 中所有的基本类型——整数,浮点数,布尔量,字符串,数组和字典——都是值类型,并且都以结构体的形式在后台实现。
- 例如
这里我们声明了变量 hd 将实例化对象someStructName1
赋值给hd
,现在我们更改 hd的属性 width
,但是someStructName1.width
的值并没有改变
,这说明现在hd 和 someStructName1 完全是两个不同的实例
。
// 关于值类型
var hd = someStructName1
hd.width = 11.0
someStructName1.width // print: 10
枚举也相同。
二、类的简单介绍
- 类是引用类型:不同于值类型,在引用类型被赋值到一个常量,变量或者本身被传递到一个函数的时候它是不会被拷贝的。相对于拷贝,这里使用的是
同一个对现存实例的引用
。
1. 类的声明
Swift中用 class
关键字定义类
class 类的名称 {
// 属性和方法
}
// 举例
class className{
var name = "annwn"
var age = 23
var sex = "男"
func say() -> () {
print("求职中...")
}
}
2. 类的实例化
var annwnClass = className()
3. 访问类的属性和方法
直接可以通过点语法实现
annwnClass.name = "shiwen9"
annwnClass.age = 22
annwnClass.say()
3. 类是引用类型
下面我们 annwnClass
赋值给 annwnclass2
当我们改变 annwnclass2
的属性值name
会发现 annwnClass .name
的值也改变了。
// 类是引用类型
var annwnclass2 = annwnClass
annwnclass2.name = "best 稳"
print(annwnClass.name)
4. 特征运算符
因为类是引用类型,有可能有很多常量和变量都是引用到了同一个类的实例。有时候找出两个常量或者变量是否引用自同一个类实例非常有用。
Swift提供了两个特点运算符:
- 相同于 ( ===)
- 不相同于( !==)
if annwnClass === annwnclass2 {
print("相同于")
}
if annwnClass !== annwnclass2 {
print("不相同于")
}
-
注意:
- “相同于”意味着两个类类型常量或者变量引用自相同的实例;
- “等于”意味着两个实例的在值上被视作“相等”或者“等价”,某种意义上的“相等”,就如同类设计者定义的那样。
三、类和结构体的异同和如何选择
1. 类和结构体的异同
-
在 Swift 中类和结构体有很多共同之处,它们都能:
- 定义属性用来存储值;
- 定义方法用于提供功能;
- 定义下标脚本用来允许使用下标语法访问值;
- 定义初始化器用于初始化状态;
- 可以被扩展来默认所没有的功能;
- 遵循协议来针对特定类型提供标准功能。
-
类有而结构体没有的额外功能:
- 继承允许一个类继承另一个类的特征;
- 类型转换允许你在运行检查和解释一个类实例的类型;
- 反初始化器允许一个类实例释放任何其所被分配的资源;
- 引用计数允许不止一个对类实例的引用。
注意:结构体在你的代码中通过复制来传递,并且并不会使用引用计数。
2. 类和结构体之间的选择
-
类和结构体都可以用来定义自定义的数据类型,作为你的程序代码构建块。
-
结构体实例总是通过值来传递,而类实例总是通过引用来传递。
-
符合创建结构体的情况:
- 几何形状的大小,可能封装了一个 width属性和 height属性,两者都为 double类型;
- 一定范围的路径,可能封装了一个 start属性和 length属性,两者为 Int类型;
- 三维坐标系的一个点,可能封装了 x , y 和 z属性,他们都是 double类型。
类和结构体的介绍就到这里了。有什么不足的地方欢迎补充。文章大多数内容来自:
求职广告:本人实习生,现在急需一份工作,杭州南京合肥的都可以。对我感兴趣的可以私聊我 0.0。谢谢~~~