swift - 类和结构体(之定义与区别)

来源:互联网 发布:js 在线翻译接口 编辑:程序博客网 时间:2024/05/09 16:33

类和结构体

结构体包括:杖举、数组、字典。即都为值类型

类为引用类型

 结构体杖举属性支持支持支持定义方法支持支持支持附属脚本支持支持支持构造器支持支持支持扩展来增强类或结构体默认实现的功能支持支持支持支持协议支持支持支持继承支持不支持不支持类型转换支持不支持不支持析构方法支持不支持不支持引用计数的方式支持不支持不支持

1.定义:

struct Resolution{

   var width = 100

  var height = 100  

}

class VideoMode{

var resolution = Resolution()

var interlaced = false

var frameRate = 0.0

var name : String?

}

2.创建类和结构体实例:

  let someResolution =  Resolution()

  let someVideoMode = VideoMode()



二、值类型和引用类型

在swift语言中分值类型和引用类型。前面介绍的基础类型(Int、Float、String、Array、Dictionary等)都是值类型。值类型在赋值时就是一个拷贝过程。  (修改新值也不会影响原来的值)

对于一些复杂的类型,如类,是引用类型。如果在类对象之间发生赋值操作,就相当于该类对象被多次引用。如果使用一个引用修改类成员的值,那么其他引用对应的成员值也会发生变化

赋值方式如:

值类型:

let hd = Resolution(width:1920,height:1080)

var cinema = hd

cinema.width = 2048

println("cinema is now \(cinema.width) pixels wide")  //cinema is now 2048 pixels wide 

println("hd is still \(hd.width) pixels wide")//hd is still 1920 pixels wide

引用类型:

let vm = VideoMode()

var vm1 = vm 

vm1.frameRate = 2.0

println("vm.frameRate is now \(vm.frameRate)")//vm.frameRate is now 2.0

println("vm1.frameRate is now \(vm1.frameRate)")//vm.frameRate is now 2.0


三、类对象的判断(===、!==)

l.let myVideoMode1 = VideoMode()

 let myVideoMode2 = VideoMode()


var myVideoMode3 = myVideoMode1

 //返回true

if myVideoMode1 === myVideoMode3{//myVideoModel 和 myVideoMode3 引用了同一个类对象

 println("myVideoModel 和 myVideoMode3 引用了同一个类对象")

}else{

 println("myVideoModel1 和 myVideoMode3 引用了不同的类对象")

}


//返回true

if myVideoMode1 !== myVideoMode2{//myVideoMode1 和 myVideoMode2引用了不同的类对象

 println("myVideoMode1 和 myVideoMode2引用了不同的类对象" )

}else{

println("myVideoMode1和myVideoMode2引用了同一个类对象")

}


0 0
原创粉丝点击