Swift 结构体
Swift 结构体是构建代码所用的一种通用且灵活的构造体。
我们可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能。
与 C 和 Objective C 不同的是:
-
结构体不需要包含实现文件和接口。
-
结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口。
结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。
struct Student{
//加入static关键字 只能通过Student直接获取
static let name = "Mike"
var height = 188
var score = 88
private static let habitDescript = "\(name)喜欢"
//只能struct 内部使用
public var habit = "\(Student.habitDescript)排球"
}
let stu = Student()
print(Student.name, stu.height, stu.score, stu.habit)
运行结果:Mike 188 88 Mike喜欢排球
克隆结构体
struct Mark{
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
let mark1 = Mark(mark: 90)
var mark2 = mark1 //克隆一个
mark2.mark = 100;
print(mark1.mark, mark2.mark)
运行结果:90 100
结构体应用
在你的代码中,你可以使用结构体来定义你的自定义数据类型。
结构体实例总是通过值传递来定义你的自定义数据类型。
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
- 结构体的主要目的是用来封装少量相关简单数据值。
- 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
- 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
- 结构体不需要去继承另一个已存在类型的属性或者行为。
举例来说,以下情境中适合使用结构体:
几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
三维坐标系内一点,封装x,y和z属性,三者均为Double类型。
struct Marks{
var math: Int
var english: Int
var chinese: Int
init(math: Int, english: Int, chinese: Int) {
self.math = math
self.english = english
self.chinese = chinese
}
}
let stuMark1 = Marks(math: