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

前端之家收集整理的这篇文章主要介绍了swift - 类和结构体(之定义与区别)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

类和结构体

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

类为引用类型

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

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引用了同一个类对象")

}

猜你在找的Swift相关文章