经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Swift » 查看文章
Swift 结构体的使用
来源:cnblogs  作者:鸿鹄当高远  时间:2018/9/25 20:29:03  对本文有异议

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

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

与 C 和 Objective C 不同的是:

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

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

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

 

语法

我们通过关键字 struct 来定义结构体:

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

 

实例

我们定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int:

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

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

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

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

我们通过结构体名 'studentMarks' 访问学生的成绩。结构体成员初始化为mark1, mark2, mark3,数据类型为整型。

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

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

以下实例化通过结构体实例化时传值并克隆一个结构体:

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

结构体应用

在你的代码中,你可以使用结构体来定义你的自定义数据类型。

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

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

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

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

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

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

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

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号