Swift类和结构体(Classes and Structures)
2015-10-29 11:03
633 查看
在Swift中,类和结构体是通用且灵活的架构,枚举是一组相关的值的集合,并允许你在代码中使用它们。你可以在类和结构体中添加属性和方法,如常量、变量和函数。
相对于其他编程语言,当你想创建类和结构体时,需要创建接口文件和实现文件。Swift不需要你创建接口文件和实现文件,如玩过OC的朋友都知道.h和.m文件。在Swift中,当你想创建类和结构体时,只需要创建一个文件。这个类和结构的外部接口可自动给其他代码使用。
为存储值声明属性;
定义函数的方法;
定义下标并支持下标语法;
为属性设置初始值;
可扩展;
为子类提供规范。
类支持的功能而结构体不支持的功能有:
可继承,使一个类继承另一个类的特性;
在运行过程中,可转换类型;
在类销毁时释放资源;
引用计数运行多个引用到同一个类实例。
这里定义了有属性的类和结构体:
可以看出,在类VideoMode中resolution指向一个结构体,name是一个可为nil或String类型的数据,其他属性都指定了默认值。
你还可以通过点语法改变类或结构体中的数据。
从上面的例子中可以看出,当你改变cinema的width值,不会引起hd中width的变化。
下面再用枚举举例:
在这里修改alsoTenEighty的frameRate会发现tenEighty的frameRate值也发生变化。
在swift中恒等算子有两种操作符:
===:相同实例
!==:不同实例
使用这些操作符来比较两个常量或变量是否引用同一个实例:
版权所有:http://blog.csdn.net/y550918116j
相对于其他编程语言,当你想创建类和结构体时,需要创建接口文件和实现文件。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)") // 0 print("someVideoMode.resolution.width:\(someVideoMode.resolution.width)") // 0
你还可以通过点语法改变类或结构体中的数据。
someVideoMode.resolution.width = 1280 print("someVideoMode.resolution.width:\(someVideoMode.resolution.width)") // 1024
通过成员初始化结构体
我们可以通过结构体的成员初始化结构体。这能帮我们快速初始化结构体,但是,初始化的过程必须全部成员一起初始化。let vga = Resolution(width: 640, height: 480)
结构体和枚举是值类型
什么是值类型?值类型是一个值,当它分配给一个常量、变量或被作为参数传递时,它的值是被复制的。// 结构体测试 let hd = Resolution(width: 1920, height: 1080) var cinema = hd cinema.width = 2048 // 改变cinema的值,不会改变hd中的值 print("cinema.width:\(cinema.width)") // 2048 print("hd.width:\(hd.width)") // 1920
从上面的例子中可以看出,当你改变cinema的width值,不会引起hd中width的变化。
下面再用枚举举例:
// 枚举测试 enum CompassPoint { case North, South, East, West } var currentDirection = CompassPoint.West let rememberedDirection = currentDirection // 改变currentDirection,rememberedDirection的值不会变化 currentDirection = .East print("\(rememberedDirection)") // West
类是引用对象
相当于值对象,引用对象在传递过程中是不会复制的,它们指向同一个实例。let tenEighty = VideoMode() tenEighty.frameRate = 25.0 // 引用tenEighty到alsoTenEighty,并改变alsoTenEighty中的值 let alsoTenEighty = tenEighty alsoTenEighty.frameRate = 30.0 print("tenEighty.frameRate:\(tenEighty.frameRate)") // 30
在这里修改alsoTenEighty的frameRate会发现tenEighty的frameRate值也发生变化。
恒等算子
因为类是引用类型,它可能被多个常量或变量指向。我们需要一种机制判断这些常量或变量是否指向同一个实例。这里就需要用到恒等算子。在swift中恒等算子有两种操作符:
===:相同实例
!==:不同实例
使用这些操作符来比较两个常量或变量是否引用同一个实例:
// 恒等算子是===或!== let tenEighty = VideoMode() let alsoTenEighty = tenEighty if tenEighty === alsoTenEighty { print("相同实例") }
其他
参考资料
The Swift Programming Language (Swift 2.1)文档修改记录
时间 | 描述 |
---|---|
2015-10-28 | 根据 The Swift Programming Language (Swift 2.1)中的Classes and Structures总结 |
相关文章推荐
- SWIFT——增加和删除数组元素
- SWIFT——枚举数组元素的方法
- owncloud配置swift外接存储
- SWIFT——数组的创建和初始化
- Swift Cheat Sheet [2] - Control Flow
- Swift Cheat Sheet [1] — Basic Types
- 3、Swift变量、常量、函数、类以及扩展类的使用
- Swift下单例模式
- 2、Swift出现Missing argument label 'XX:'in call 错误的解决方法
- 1、创建第一个swift程序(系统是OS X 10.11,工具是Xcode7.1)
- swift 的循环
- swift基本类型
- swift 关于 toolbar 学习笔记
- Swift解析:将推动应用开发巨变
- Swift开发IOS基础(动态更新)
- swift中如何定义一个变量,数组。
- Swift学习day2之Tuple
- SWIFT——操作符基础
- SWIFT——类型转换基础
- Swift枚举(Enumerations)