Note 7 类和结构体
2016-07-22 本文已影响10人
cry_0416
结构体
struct student {
var name : String?
var number : Int?
var age : UInt?
func infoprint(){//结构体的方法,不能改变成员的值
print(name, number, age)
}
static var i = 123 //静态成员,需要用结构体名来调用
init() {//定义构造函数,对结构体成员进行初始化赋值
name = ""
number = 0
age = 0
}
init(name:String){
self.name = "cry"
}
init(number:Int){
self.number = 23
}
}
类
class dog {
var kind: String = ""
var weight: Double = 0.0
static var i = 0 //静态成员,通过类名调用 类名.静态成员名 例如: dog.i
func bite (name:String) -> Int{
print("bite", name)
return 1
}
//当类没有构造函数时,编译器自动生成一个无参的构造函数;一旦自己创建了构造函数,编译器就不会自动生成一个无参构造函数
class func test(){
print("test1")
print(i)
i = i + 1
}//类方法不能直接使用成员变量,通过类名调用,可以使用静态成员
}
定义
- 类的属性
- 成员变量
- 静态变量
- 成员方法
- 类方法
let dog1 = dog()
//如果是结构体,dog1 的属性不能更改
//let改成var就可以
dog1.kind = "中华田园犬"
dog1.weight = 4
print(dog1.bite("xx"))
let dog2 = dog1
dog2.kind = "藏獒" //如果是结构体 则变成两个,类是引用类型
//strong/weak 强引用 弱引用
//当一个对象被创建了,没有被使用的时候会被释放
//例:
var d1 = dog() //一旦执行dog(),就创建一个对象,让d1引用这个对象,相当于给了这个对象名字d1
weak var d2 = d1 //让d2同样引用这个对象,weak定义的变量 一定是可选类型(optional类型)
d1 = dog() //重新创建一个对象,让d1指向了这个对象
//一开始创建的那个对象,只有d2在引用,但是是weak引用
//所以一开始的dog()对象会被释放
//*对象一旦没有强引用类型引用的时候,就被释放*
与结构体的区别
- 用let定义的结构体变量,成员不能修改
- 结构体是值类型.赋值的时候会发生赋值
- 类是引用类型
- 结构体的值不能随便修改,要加关键字mutating