Classes and Structures

//swift中的类,不需要像C++一样分开提供声明和定义,更像python中的类一样,类似函数定义一样直接使用

/*

类和结构体的共同点:

1.可以定义属性

2.定义方法

3.可以通过实例.属性的方法来访问成员

4.可以定义初始化函数(构造函数)

5.可以通过定义扩展函数来扩展功能

6.可以使用protocol


类比结构体多的特性:

1.类可以继承,结构体不可以

2.类可以进行类型转换(子类,父类 Type casting,结构体不可以

3.类可以通过析构来释放资源,结构体不可以

4.类有Reference counting,类实例可以被多个reference

  结构体不可以,结构体是value type


结构体与类区别:

机构体实例可以在定义的时候对成员属性通过默认参数的形式进行逐一赋值(Memberwise

但是类实例定义时候不可以。var s = TestStruct(memberVar:3)


结构体,枚举和类不一样,结构体和枚举是value type的。即在赋值的时候是整个拷贝的。

Int,String,Float,Bool,Array,Dictionary都是valueType

如果你通过cmd键点击变量进去就会发现,这些类型都是通过结构体来定义的。


注意:Foundation库中的NSStringNSArrayNSDictionary是用类实现的,他们的

实例在使用的时候是引用类型。

*/


class TestClass {

   var memberVar = 0

    

   func memberFunc() {

        println("I'm TestClass! memberVar:\(self.memberVar)")

    }

}


struct TestStruct {

   var memberVar = 0

    

   func memberFunc() {

        println("I'm TestStruct! memberVar:\(self.memberVar)")

    }

}


var c = TestClass()

//结构体可以在定义的时候给每个成员变量通过函数默认值的形式赋初值,类不可以。

var s =TestStruct(memberVar:3)


//结构体是value type

var s2 =s

s.memberVar = 20

s.memberFunc()//I'm TestStruct! memberVar:20

s2.memberFunc()//I'm TestStruct! memberVar:0


//类是引用类型

var c2 =c

c.memberVar = 20

c.memberFunc()//I'm TestStruct! memberVar:20

c2.memberFunc()//由于cc2是指向同一个数据的两个引用,这个也会输出20


//Identity equal === !== 判断两个变量是否引用到同一实例。

if (c === c2) {

    println("c and c2 reference to the same instance")

}

var c3 = TestClass()

ifc !== c3 {

    println("c and c3 reference to the different instance")

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值