类及构造函数/析构函数
class rectangel {//定义一个类
var width : Double
var height : Double
var x : Double
var y : Double
static var i = 0
init (){
width = 0
height = 0
x = 0
y = 0
}//定义构造函数进行初始化,自定义构造函数,编译器将不再生成无参的构造函数
func fat(change: Double) -> Double {
width += change
return width
}//定义成员方法(变宽)
class func infoprint(){//定义类方法
i = 23
print(i)
print("谢谢观赏")
}
deinit{//析构函数:反初始化,释放已拥有的资源
print("资源已经释放")
}
}
//与结构体的区别:
//1.用let定义的结构体变量,成员不能修改
//2.结构体是值类型,在赋值的时候发生复制
//3.类是引用类型
//4.结构体成员方法需要加上mutating才能修改成员
//5.类中的成员变量构造函数默认没有参数,必须初始化
var xx1 = rectangel()//创建对象,在堆上分配空间
xx1.height = 30
xx1.width = 20
xx1.x = 50
xx1.y = 60
print(xx1.height, xx1.width, xx1.x, xx1.y)
//默认是为strong引用,可添加weak变为弱引用,(弱引用需要使用!取成员)
weak var xx2 = xx1
xx2!.height = 90
xx2!.width = 25
rectangel.i = 14//静态成员用类名调用
print(xx2!.height, xx2!.width, xx2!.x, xx2!.y, rectangel.i)
xx1 = rectangel()//当再次创建时,若无强引用,则原xx1中的资源将会被释放
var xx3 = rectangel()
xx3.height = 100
xx3.width = 35
xx3.x = 22
print(xx3.height, xx3.width, xx3.x, xx3.y)
rectangel.infoprint()