Swift 结构体
Swift 4提供了一种灵活的构建模块,可以使用结构体。通过使用这些结构体,可以定义构建方法和属性。
与C和Objective C不同
- 结构体不需要实现文件和接口。
-
结构体允许我们创建单个文件,并自动将其接口扩展到其他代码块。
在结构体中,变量的值是通过返回旧值的副本来复制和传递的,从而无法改变这些值。
语法
Structures are defined with a 'Struct' Keyword.
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上运行上述程序时,我们得到以下结果:
当我们在playground上运行上述程序时,我们得到以下结果:
Mark1 is 100
Mark2 is 200
Mark3 is 300
学生的成绩通过结构名字’studentMarks’进行访问。这个结构的成员被初始化为mark1、mark2和mark3,其值为整数类型。然后使用’let’关键字将结构’studentMarks()’传递给’marks’。从此以后,’marks’将包含结构的成员值。现在通过使用’.’和初始化名字来访问结构成员的值来打印这些值。
struct MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct and bStruct are two structs with the same value!
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的结构块传递给变量marks
,此时marks
将保存学生的分数。然后将分数打印出来,分别为98、96和100。接下来,对于相同的结构体成员,使用名为fail
的另一个实例来指向不同的分数。然后打印出结果,分别为34、42和13。这清楚地说明了结构体将拥有成员变量的副本,然后将成员传递给下一个函数块。