Swift - 结构


Swift 4 提供了一个灵活的构建块,可以将构造用作结构。通过使用这些结构一次可以定义构造方法和属性。

与 C 和 Objective C 不同

  • 结构不需要实现文件和接口。

  • 结构允许我们创建单个文件并将其接口自动扩展到其他块。

在 Structure 中,通过返回旧值的副本来复制变量值并在后续代码中传递,以便这些值无法更改。

句法

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 运行上述程序时,我们得到以下结果 -

Mark1 is 100
Mark2 is 200
Mark3 is 300

学生分数可通过结构名称“studentMarks”访问。结构体成员被初始化为具有整数类型值的mark1、mark2、mark3。然后结构体studentMarks()通过'let'关键字传递给'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”变量,该变量现在将保存学生标记。然后将标记打印为 98、96、100。下一步,对于相同的结构成员,使用另一个名为“fail”的实例来用不同的标记来指向相同的结构成员。然后结果现在打印为 34, 42, 13。这清楚地解释了结构将拥有成员变量的副本,然后将成员传递到即将到来的功能块。