详解Swift 结构体
Swift结构体是构建代码所用的一种通用且灵活的构造体。
我们可以为结构体定义属性(常量、变量)和添加方法,从而扩展结构体的功能。
与C和ObjectiveC不同的是:
- 结构体不需要包含实现文件和接口。
- 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口。
结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的。
语法
我们通过关键字struct来定义结构体:
structnameStruct{ Definition1 Definition2 …… DefinitionN }
实例
我们定义一个名为MarkStruct的结构体,结构体的属性为学生三个科目的分数,数据类型为Int:
structMarkStruct{ varmark1:Int varmark2:Int varmark3:Int }
我们可以通过结构体名来访问结构体成员。
结构体实例化使用let关键字:
importCocoa structstudentMarks{ varmark1=100 varmark2=78 varmark3=98 } letmarks=studentMarks() print("Mark1是\(marks.mark1)") print("Mark2是\(marks.mark2)") print("Mark3是\(marks.mark3)")
以上程序执行输出结果为:
Mark1是100
Mark2是78
Mark3是98
实例中,我们通过结构体名'studentMarks'访问学生的成绩。结构体成员初始化为mark1,mark2,mark3,数据类型为整型。
然后我们通过使用let关键字将结构体studentMarks()实例化并传递给marks。
最后我们就通过.号来访问结构体成员的值。
以下实例化通过结构体实例化时传值并克隆一个结构体:
importCocoa structMarksStruct{ varmark:Int init(mark:Int){ self.mark=mark } } varaStruct=MarksStruct(mark:98) varbStruct=aStruct//aStruct和bStruct是使用相同值的结构体! bStruct.mark=97 print(aStruct.mark)//98 print(bStruct.mark)//97
以上程序执行输出结果为:
98
97
结构体应用
在你的代码中,你可以使用结构体来定义你的自定义数据类型。
结构体实例总是通过值传递来定义你的自定义数据类型。
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
- 结构体的主要目的是用来封装少量相关简单数据值。
- 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
- 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
- 结构体不需要去继承另一个已存在类型的属性或者行为。
举例来说,以下情境中适合使用结构体:
- 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
- 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
- 三维坐标系内一点,封装x,y和z属性,三者均为Double类型。
结构体实例是通过值传递而不是通过引用传递。
importCocoa structmarkStruct{ varmark1:Int varmark2:Int varmark3:Int init(mark1:Int,mark2:Int,mark3:Int){ self.mark1=mark1 self.mark2=mark2 self.mark3=mark3 } } print("优异成绩:") varmarks=markStruct(mark1:98,mark2:96,mark3:100) print(marks.mark1) print(marks.mark2) print(marks.mark3) print("糟糕成绩:") varfail=markStruct(mark1:34,mark2:42,mark3:13) print(fail.mark1) print(fail.mark2) print(fail.mark3)
以上程序执行输出结果为:
优异成绩:
98
96
100
糟糕成绩:
34
42
13
以上实例中我们定义了结构体markStruct,三个成员属性:mark1,mark2和mark3。结构体内使用成员属性使用self关键字。
从实例中我们可以很好的理解到结构体实例是通过值传递的。
以上就是详解Swift结构体的详细内容,更多关于Swift结构体的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。