Swift类和结构体(Classes and Structures)

Swift类和结构体(Classes and Structures),第1张

概述在Swift中,类和结构体是通用且灵活的架构,枚举是一组相关的值的集合,并允许你在代码中使用它们。你可以在类和结构体中添加属性和方法,如常量、变量和函数。 相对于其他编程语言,当你想创建类和结构体时,需要创建接口文件和实现文件。Swift不需要你创建接口文件和实现文件,如玩过OC的朋友都知道.h和.m文件。在Swift中,当你想创建类和结构体时,只需要创建一个文件。这个类和结构的外部接口可自动给其

在Swift中,类和结构体是通用且灵活的架构,枚举是一组相关的值的集合,并允许你在代码中使用它们。你可以在类和结构体中添加属性和方法,如常量、变量和函数。

相对于其他编程语言,当你想创建类和结构体时,需要创建接口文件和实现文件。Swift不需要你创建接口文件和实现文件,如玩过OC的朋友都知道.h和.m文件。在Swift中,当你想创建类和结构体时,只需要创建一个文件。这个类和结构的外部接口可自动给其他代码使用。

比较类和结构体

类和结构体有很多共同点:

为存储值声明属性; 定义函数的方法; 定义下标并支持下标语法; 为属性设置初始值; 可扩展; 为子类提供规范。

类支持的功能而结构体不支持的功能有:

可继承,使一个类继承另一个类的特性; 在运行过程中,可转换类型; 在类销毁时释放资源; 引用计数运行多个引用到同一个类实例。 定义语法

类和结构体的定义语法是相似的,只是定义类用的关键字是class,定义结构体的关键字是struct。下面定义了一个空的类和结构体:

class SomeClass {}struct SomeStructure {}

这里定义了有属性的类和结构体:

struct Resolution {    var wIDth = 0    var height = 0}class VIDeoMode {    var resolution = Resolution()    var interlaced = false    var frameRate = 0.0    var name: String?}

可以看出,在类VIDeoMode中resolution指向一个结构体,name是一个可为nil或String类型的数据,其他属性都指定了默认值。

类和结构体初始化
let someResolution = Resolution()let someVIDeoMode = VIDeoMode()
访问属性

访问类和结构体的属性可以使用点语法。

print("someResolution.wIDth:\(someResolution.wIDth)") // 0print("someVIDeoMode.resolution.wIDth:\(someVIDeoMode.resolution.wIDth)") // 0

你还可以通过点语法改变类或结构体中的数据。

someVIDeoMode.resolution.wIDth = 1280print("someVIDeoMode.resolution.wIDth:\(someVIDeoMode.resolution.wIDth)") // 1024
通过成员初始化结构体

我们可以通过结构体的成员初始化结构体。这能帮我们快速初始化结构体,但是,初始化的过程必须全部成员一起初始化。

let vga = Resolution(wIDth: 640,height: 480)
结构体和枚举是值类型

什么是值类型?值类型是一个值,当它分配给一个常量、变量或被作为参数传递时,它的值是被复制的。

// 结构体测试let hd = Resolution(wIDth: 1920,height: 1080)var cinema = hdcinema.wIDth = 2048 // 改变cinema的值,不会改变hd中的值print("cinema.wIDth:\(cinema.wIDth)") // 2048print("hd.wIDth:\(hd.wIDth)") // 1920

从上面的例子中可以看出,当你改变cinema的wIDth值,不会引起hd中wIDth的变化。

下面再用枚举举例:

// 枚举测试enum Compasspoint {    case north,South,East,West}var currentDirection = Compasspoint.Westlet rememberedDirection = currentDirection// 改变currentDirection,rememberedDirection的值不会变化currentDirection = .Eastprint("\(rememberedDirection)") // West
类是引用对象

相当于值对象,引用对象在传递过程中是不会复制的,它们指向同一个实例。

let tenEighty = VIDeoMode()tenEighty.frameRate = 25.0// 引用tenEighty到alsoTenEighty,并改变alsoTenEighty中的值let alsoTenEighty = tenEightyalsoTenEighty.frameRate = 30.0print("tenEighty.frameRate:\(tenEighty.frameRate)") // 30

在这里修改alsoTenEighty的frameRate会发现tenEighty的frameRate值也发生变化。

恒等算子

因为类是引用类型,它可能被多个常量或变量指向。我们需要一种机制判断这些常量或变量是否指向同一个实例。这里就需要用到恒等算子。

在swift中恒等算子有两种 *** 作符:

===:相同实例 !==:不同实例

使用这些 *** 作符来比较两个常量或变量是否引用同一个实例:

// 恒等算子是===或!==let tenEighty = VIDeoMode()let alsoTenEighty = tenEightyif tenEighty === alsoTenEighty {    print("相同实例")}
其他 参考资料

The Swift Programming Language (Swift 2.1)

文档修改记录
时间 描述
2015-10-28 根据 The Swift Programming Language (Swift 2.1)中的Classes and Structures总结

版权所有:http://blog.csdn.net/y550918116j

总结

以上是内存溢出为你收集整理的Swift类和结构体(Classes and Structures)全部内容,希望文章能够帮你解决Swift类和结构体(Classes and Structures)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1083219.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存