第七课类和结构体
来源:互联网 发布:apache tomcat怎么解决 编辑:程序博客网 时间:2024/05/16 15:25
类和结构体是人们构建代码所用的一种通用且灵活的构造体。为了在类和结构体中实现各种功能,我们必须要严格按照对于常量,变量以及函数所规定的语法规则来定义属性和添加方法。一个类的实例,被成为对象。Swift 中类和结构体有很多共同点。
1:类和结构体对比
共同处: 定义属性用于储存值、定义方法用于提供功能、定义下标用于通过下标语法访问值、定义初始化器用于生成初始化值、通过扩展以增加默认实现的功能、符合协议以对某类提供标准功能。
不同处:类可以继承,类型转换允许在运行是检查和解释一个类的实例类型,也就是在运行时检查一个类的实例类型。
允许一个类实例释放任何其所被分配的资源、引用计数允许对一个类的多次引用。
2:定义
class Demo{ // 这是类的一个定义, class 是定义类的关键字。{}大括号是类体。
}
struct Demo{ //这是一个结构体的定义,struct 是定义结构体的关键字,{}大括号是结构体。
}
类和结构体的命名方式,使用驼峰式命名,就是每一个单词的首字母大写比如:NameDemo
struct Car {
var width:Int = 100var heigth:Int = 200使用init 作为结构体初始化方法, 如果不写,结构体默认是:init(){} 初始化方法。init(wis:Int, hgt:Int){ //这是结构体初始化方法,在结构体初始化的时候,就设置宽高 width = wis heigth = hgt}
//
init(){}
}
class CarDemo: NSObject {
var car = Car(wis: 12, hgt: 123)var name:String?override init() { //这是类的初始化方法,与结构体不同的是,在初始化方法中,需要调用父类初始化方法。 super.init()}init(name: String) { super.init() self.name = name}
}
let car = Car() //调用初始化方法,初始化结构体。
let carDemo = CarDemo()//调用初始化方法,初始化实例。
// 属性访问
println(“(carDemo.car.heigth)”)//打印汽车的高度
carDemo.car.width = 100 //为属性复制。
类是引用类型
与值类型不同,引用类型在被赋予到一个变量,常量或者被传递到一个函数时,操作的并
不是其拷贝。因此,引用的是已存在的实例本身而不是其拷贝。
let carDemo = CartDemo()
let carTest = carDemo //因为类是引用类型,所以carDemo,carTest指向的是CartDemo的同一个实例。
恒等运算符,用作判断两个常量和变量所引用类的实例,是否同一个实例。等价于 ( === ) 不等价于 (!==)
let carDemo = CartDemo()
let carTest = carDemo
if carDemo === carTest //结果为true ,因为carDemo,carTest都是引用的同一个实例。
if carDemo !== carTest //结果为false
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
结构体的主要目的是用来封装少量相关简单数据值。
有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
结构体不需要去继承另一个已存在类型的属性或者行为。
在所有其它案例中,定义一个类,生成一个它的实例,并通过引用来管理和传递。实际
中,这意味着绝大部分的自定义数据构造都应该是类,而非结构体。
- 第七课类和结构体
- 第七章-结构体
- iOS开发学习第七课——结构体的定义、声明和应用
- 第七课 分支结构体验
- PHP第七课 类和对象
- 《C++ Prime Plus 第七章》—函数和结构体初识
- 第七节 结构体与联合体
- C语言第七讲(Struct结构体)
- 【软件测试】操作系统篇:第七章 操作系统结构和程序设计
- 【软件测试】操作系统篇:第七章 操作系统结构和程序设计
- 结构体和类
- 结构体和类
- 结构体和类
- 类和结构体
- 结构体和类
- 类和结构体
- 类和结构体
- 结构体和类
- Project0(Get familiar with Linux) (Part 2)
- 这一年我写过的代码
- 安卓:将数据库中的数据查询出来用adapter(SimpleAdapter,SimpleCursorAdapter,自定义适配器CursorAdapter)绑定到listview上
- JAVscript对象
- 在Virtualenv中导入PyQT4
- 第七课类和结构体
- iOS UITableViewCell 多线程 网络+沙盒的图片加载以及第三方框架SDWebImage方式加载
- androidday01_html
- navicat无法连接Linux虚拟机中MySQL
- Android Bitmap
- EntityFramework 性能优化之查询编译
- 09-16 压缩图片
- CSS 水平垂直居中 方法一
- Redis学习12之jedis的set时间测试