swift学习日记(四) 枚举 类
来源:互联网 发布:淘宝dnf稀有装扮兑换券 编辑:程序博客网 时间:2024/06/01 08:32
又到深夜了,不过还是尽量保持每天一篇的节奏
一,枚举
1,
从任何角度,任何语言看,枚举都不是什么难点
稍有不同的是,swift的枚举更接近“类”
先贴代码
enum CompassPoint { case North case South case East case West}var directionToHead = CompassPoint.SouthdirectionToHead = .Northswitch directionToHead {case .North: print("Lots of planets have a north")case .South: print("Watch out for penguins")case .East: print("Where the sun rises")case .West: print("Where the skies are blue")}
枚举的声明定义就是使用 enum 关键字,使用 case 关键字 声明枚举里面的值
swift的枚举不是把枚举的值映射到数字,而是苹果自己定义的数据类型
如果是同一枚举类型内的赋值,则可以简写成
directionToHead = .North
2,关联值
swift还将枚举类型赋予了一些原本c++中union类型的特性,比如如下
enum Barcode { case UPCA(Int, Int, Int) case QRCode(String)}var productBarcode = Barcode.UPCA(8, 85909_51226, 3)switch productBarcode {case .UPCA(let numberSystem, let identifier, let check): print("UPC-A with value of \(numberSystem), \(identifier), \(check).")case .QRCode(let productCode): print("QR code with value of \(productCode).")}
枚举类型不仅可以为自定义的值,还可以为其定义一个“关联值”,这个值可以被初始化为一定结构的关联值
此时枚举里面每一个值都有一个自己的数据结构,他们本身还被认为是一个变量
按我的理解,其实这里枚举的值已经可以看作是一个数组了
3,初始值
和参数一样,枚举类型也可以有初始值,这个很简单
enum ASCIIControlCharacter: Character { case Tab = "\t" case LineFeed = "\n" case CarriageReturn = "\r"}
注意,初始值跟关联值略有不同,初始值就是该值被存储的值,关联值还会被影射成其它类型的值
原始值可以是字符串,字符,或任何整数或浮点数类型。每个原始值必须在它的枚举中唯一声明。当整数被用于原始值,如果其他枚举成员没有值时,它们自动递增。
比如
enum Planet: Int { case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune}
后面的枚举值从2递增
就这么多
二,类
上面提到swift的枚举跟类已经有点像了,下面就是类
class family { init(s:String, d:String, m:String) { son = s dad = d mom = m } var son = "Default" var dad = "Default" var mom = "Default"}var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")
与c++不同的是
1,类的构造函数使用init,而不是与类名同名的函数
2,构造函数的调用有点类似于函数的外部参数
3,据我测试,构造函数必须要有类型,虽然swift是弱类型语言,但是其处处都表露出强类型语言的规范
类最大的用处还是它的方法
强烈注意:swift的类是引用类型
也就是说,一个实例化的类,无论被复制多少次,修改的都是这个实例的值,所以引用它的变量都会变
与之对比的是,枚举类型是数值类型,当其被复制时,复制后的变量与原本的变量就毫无关系了
如果需要使用数值类型,请使用结构体,具体方法跟c++中类与结构体的区别类似,各位请自学
还是贴一段代码看看吧
class family { init(s: String, d:String, m:String) { son = s dad = d mom = m } var son = "Default" var dad = "Default" var mom = "Default"}var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")var Pre = DumphyPre.son = "Mitch"print(Dumphy.son) // output: Mitch
如果需要深拷贝,我暂时想到的方法还是再实例化一个新对象,暂时想不到其它办法
虽然我还没开始做开发,但是可预见到,这会是个大坑
今天就到这了
0 0
- swift学习日记(四) 枚举 类
- iOS学习笔记44-Swift(四)枚举和结构体
- iOS学习笔记44-Swift(四)枚举和结构体
- Swift 学习日记2
- Swift学习日记001
- Swift学习日记002
- Swift学习日记003
- Swift学习日记004
- swift学习日记
- Swift学习 --- 2.8枚举
- swift学习:9.枚举
- Swift学习之枚举
- Swift学习:2.8 枚举
- Swift 的学习(枚举)
- swift 数组、字典、集合、结构体、枚举——swift学习(四)
- ios swift学习日记1-Swift 初见
- swift学习日记(五) 属性
- swift学习日记(六) 方法
- linux 下使用 man 查看 c++ 库函数
- Rt_thread 源码注释
- Centos (rpm 管理)- ubuntu(dpkg 管理)
- 关于有偿提供拼图响应式后台的通知
- Linux-CentOS Elasticsearch 安装ik中文分词
- swift学习日记(四) 枚举 类
- IntelliJ IDEA 15 Released 破解 注册码
- 公钥和私钥
- 多媒体编程
- 每天一个linux命令之coreutils包: [命令
- DLch1
- 每天一个linux命令之coreutils包: base64命令
- Linuxmint17.2我的私人定制
- 随机梯度下降(SGD)