Swift 3 结构体

Swift 结构体是构建代码所用的一种通用且灵活的构造体

可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能

与 C 和 Objective C 不同的是:

  • 结构体不需要包含实现文件和接口

  • 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口

结构体总是通过值传递的方式在代码中传递,因此它的值是不可修改的

语法

Swift 通过使用关键字 struct 来定义结构体

  1. struct nameStruct
  2. {
  3. Definition 1
  4. Definition 2
  5. ……
  6. Definition N
  7. }

范例

下面的代码定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int

  1. struct MarkStruct
  2. {
  3. var mark1: Int
  4. var mark2: Int
  5. var mark3: Int
  6. }

可以通过结构体名来访问结构体成员

结构体实例化使用 let 关键字

  1. import Cocoa
  2. struct studentMarks
  3. {
  4. var mark1 = 100
  5. var mark2 = 78
  6. var mark3 = 98
  7. }
  8. let marks = studentMarks()
  9. print("Mark1 是 \(marks.mark1)")
  10. print("Mark2 是 \(marks.mark2)")
  11. print("Mark3 是 \(marks.mark3)")

编译运行以上 Swift 范例,输出结果为

  1. $ swift main.swift
  2. Mark1 100
  3. Mark2 78
  4. Mark3 98

范例中,我们通过结构体名 'studentMarks' 访问学生的成绩

结构体成员初始化为 mark1, mark2, mark3,数据类型为整型

然后通过使用 let 关键字将结构体 studentMarks() 实例化并传递给 marks

最后我们就通过 . 号来访问结构体成员的值

下面的范例通过结构体实例化时传值并克隆一个结构体

  1. import Cocoa
  2. struct MarksStruct {
  3. var mark: Int
  4. init(mark: Int) {
  5. self.mark = mark
  6. }
  7. }
  8. var aStruct = MarksStruct(mark: 98)
  9. var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的结构体!
  10. bStruct.mark = 97
  11. print(aStruct.mark) // 98
  12. print(bStruct.mark) // 97

编译运行以上 Swift 范例,输出结果为

  1. $ swift main.swift
  2. 98
  3. 97

结构体应用

我们可以使用结构体来定义自己的自定义数据类型

结构体实例总是通过值传递来定义自定义的数据类型

按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:

  • 结构体的主要目的是用来封装少量相关简单数据值
  • 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用
  • 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用
  • 结构体不需要去继承另一个已存在类型的属性或者行为

举例来说,以下情境中适合使用结构体:

  • 几何形状的大小,封装一个 width 属性和 height 属性,两者均为 Double 类型
  • 一定范围内的路径,封装一个 start 属性和 length 属性,两者均为Int类型
  • 三维坐标系内一点,封装 xyz 属性,三者均为 Double 类型

结构体实例是通过值传递而不是通过引用传递

  1. import Cocoa
  2. struct markStruct{
  3. var mark1: Int
  4. var mark2: Int
  5. var mark3: Int
  6. init(mark1: Int, mark2: Int, mark3: Int){
  7. self.mark1 = mark1
  8. self.mark2 = mark2
  9. self.mark3 = mark3
  10. }
  11. }
  12. print("优异成绩:")
  13. var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
  14. print(marks.mark1)
  15. print(marks.mark2)
  16. print(marks.mark3)
  17. print("糟糕成绩:")
  18. var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
  19. print(fail.mark1)
  20. print(fail.mark2)
  21. print(fail.mark3)

编译运行以上 Swift 范例,输出结果为

  1. $ swift main.swift
  2. 优异成绩:
  3. 98
  4. 96
  5. 100
  6. 糟糕成绩:
  7. 34
  8. 42
  9. 13

在这个范例中,我们定义了结构体 markStruct,三个成员属性:mark1, mark2 和 mark3

结构体内使用成员属性使用 self 关键字