Swift 3.0基础学习之类与结构体

2020-01-08 23:35:47王冬梅

结果


print("The frameRate property of tenEighty is now (tenEighty.frameRate)")
// Prints "The frameRate property of tenEighty is now 30.0"

标识符

完全相同(===) 不完全相同(!===)

if tenEighty === alsoTenEighty {
 print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// Prints "tenEighty and alsoTenEighty refer to the same VideoMode instance."

完全相同(===)和等于(==)是不一样的:

完全相同意思是两个类类型的常量或者变量指向完全相同的类实例 等于意思是两个实例被认为值相同或者相等, 可以自行定义==操作符来进行判断两个实例在某种意义上是相等的

选择使用类和结构体

由于结构体的实例一般是值传递,而类实例一般是引用传递,因此你需要根据实际情况来考虑应该定义一个类还是结构体.

如有以下一种或多仲情况使用结构体:

结构体主要的目的是封装少量的相关性简单数据值 在结构体的实例赋值或者传递的时候,需要考虑到封装好的值会被拷贝而不是引用是否是合理的 任何保存于结构体的属性都是值类型的,他们也是期望被赋值或者传递时是拷贝而不是引用 结构体不需要从其他存在的类型继承属性或者行为

看看几个使用结构体恰当的例子:

几何图形的大小,可以封装width和height属性,都是Double类型 指向连续序列范围的方法,可以封装start和length属性,都是Int类型 一个在3D坐标系统的点, 可以封装x, y和z属性,都是Double类型

其他的情况请定义类并创建类实例,管理和传递都使用引用。

在实践中,大部分的自定义数据结构都是使用类居多,很少使用结构体。

String、Array和Dictionary的赋值和拷贝行为

String, Array和 Dictionary都是结构体,因此赋值直接是拷贝,而NSString, NSArray 和NSDictionary则是类,所以是使用引用的方式。

参考英语原文:
https://www.easck.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-ID82

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对ASPKU的支持。


注:相关教程知识阅读请移步到swift教程频道。