//: Playground - noun: a place where people can play
import UIKit
/*swift类:Swift 类是构建代码所用的一种通用且灵活的构造体。
格式
OC @interface Person : NSObject
@end
@impeliment
@end
*/
// 1.如何声明一个类?
// 构造函数结束前必须保证所有的属性被初始化
// 注意:在定义类的属性时,需要给属性一个初始化值,或者将属性声明成可选类型
// 如果是基本数据类型(值类型),赋值一个初始化值.如果是对象类型,那么声明称可选类型
//类是具有相同属性和方法的抽象
classPerson {//基类
// 类的属性和方法
varname :String=""
varage :Int=0
varheight :Double=0.0
varbtn :UIButton?
varnumberOfSlide:Int
//构造器
init(number:Int){
print("init called")
self.numberOfSlide= number
}
//析构器
deinit {
print("denied called")
numberOfSlide = 0
}
}
// 2.创建Person对象
letp :Person=Person(number:3)
p.name = "why"
p.age = 18
p.height = 1.88
p.btn = UIButton()
//1、类是引用类型, 结构体之间的赋值其实是将r2指向了r1的存储控件, 所以他们是两个只想同一块存储空间, 修改其中一个会影响到另外一个
//2、类没有逐一构造器
//3.类与结构体的区别
///MARK: - 结构体
struct Car
{
varname:String!
init(name:String){
self.name= name
}
}
varp1 =Car(name:"bench")
varp2 =p1
p2.name = "BMW"
print(p2.name,p1.name)
/// 打印结果为BMW,bench
///MARK: - 类
class Car2
{
varname:String!
init(name:String){
self.name= name
}
}
varp12 =Car2(name:"bench")
varp22 =p12
p22.name = "BMW"
print(p12.name,p22.name)
/// 打印结果为BMW,BMW
//从上面的结果可以看出来,再次给对象赋值,结构体不会改变,而类则会改变原来的值,所以说明类的对象是引用类型,而结构体是值类型。
//还有的区别就是类是属于面向对象编程,结构体属于面向协议的编程,所谓面向协议编程其实就是面向对象的升级。在swift中推荐使用的是使用结构体,类在swift中不处于主流的地位,还有就是结构体也能够实现类的全部功能,结构体更模块化,默认实现初始化方法并且不用考虑ARC。
//结构体只需要给出变量的类型,不用给出初始值
struct car {
varname:String
}
classcar2 {
varname:String
init(name:String) {
self.name= name
}
}
//如何选择使用类还是结构体
//当赋值或者传递的时候更希望这些封装的数据被赋值,而不是被引用过去
//所有被结构存储的属性本身也是数值类型
//结构不需要被另外一个类型继承或者完成其它行为
//一些比较好的使用结构的例子:
//一个几何形状的尺寸,可能包括宽度,高度或者其它属性,每个属性都是Double类型的
//3D坐标系中的一个点,包括x,y和z坐标,都是Double类型
//在其它情况下(非数值情况下),类会是更好的选择。也就是说一般情况下,自定义的一些数据结构一般都会被定义为类