Swift 4提供了一个灵活的构建块,它使用构造作为结构体。 通过利用这些结构,可以定义构造方法和属性。
与C语言和Objective C不同
- 结构体不需要实现文件和接口。
- 结构体允许创建单个文件并将接口自动扩展到其他块。
在结构体中,通过返回旧值的副本来复制变量值并在后续代码中传递,以便不能更改这些值。
语法
// 结构体使用“struct”关键字定义。
struct nameStruct {
Definition 1
Definition 2
---
Definition N
}
定义结构体
例如,假设必须访问包含三个科目分数的学生记录,并计算出三个科目的总分数。 这里markStruct
用于初始化具有三个分数的结构体为Int
数据类型。
struct MarkStruct {
var mark1: Int
var mark2: Int
var mark3: Int
}
访问结构及其属性
结构体的成员可以通过结构体名称访问。 结构体的实例由let
关键字初始化。
struct studentMarks {
var mark1 = 100
var mark2 = 200
var mark3 = 300
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")
当playground运行上述程序时,得到以下结果 -
Mark1 is 100
Mark2 is 200
Mark3 is 300
学生分数的结构体名称为:studentMarks
。 结构体成员初始化为整数类型值:mark1
,mark2
,mark3
。 然后结构体studentMarks()
通过let
关键字传递给marks
变量。 此后marks
变量包含结构体成员值。可通过初始化的名称和.
操作符访问结构体成员值并打印。
struct MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct和bStruct是两个具有相同值的结构体
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97
当playground运行上述程序时,得到以下结果 -
98
97
结构体的使用实践
Swift 4语言提供了将结构体定义为用于构建功能块的自定义数据类型的功能。 结构体的实例通过其值传递给定义的块以进行进一步操作。
需要使用结构体来 -
- 封装简单数据值。
- 通过“值”而不是“引用”复制封装数据及其关联属性。
- “复制”和“参考”的结构体。
Swift 4中的结构体是传递成员的值而不是引用值。示例代码 -
struct markStruct {
var mark1: Int
var mark2: Int
var mark3: Int
init(mark1: Int, mark2: Int, mark3: Int) {
self.mark1 = mark1
self.mark2 = mark2
self.mark3 = mark3
}
}
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)
当playground运行上述程序时,得到以下结果 -
98
96
100
另一个示例
struct markStruct {
var mark1: Int
var mark2: Int
var mark3: Int
init(mark1: Int, mark2: Int, mark3: Int) {
self.mark1 = mark1
self.mark2 = mark2
self.mark3 = mark3
}
}
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
print(fail.mark1)
print(fail.mark2)
print(fail.mark3)
当playground运行上述程序时,得到以下结果 -
34
42
13
首先定义结构体markStruct
,它有以下几个成员:mark1
,mark2
和mark3
。 现在,成员类的变量被初始化为保存整数值。 然后使用self
关键字创建结构成员的副本。 当创建了结构成员的副本,结构块及其参数分数就会传递给marks
变量,该变量现在将保存学生分数。 然后将分数打印为98
,96
,100
。对于相同结构成员的下一步骤,使用另一个名为fail
的实例来指向具有不同分数的相同结构成员。 然后结果打印为34
,42
,13
。这清楚地解释了结构体将具有成员变量的副本,然后将成员传递给它们的功能块。