swift学习笔记->结构与枚举
2015-11-17 20:08
495 查看
先看swift的结构, 与C语言中学习的结构类似
不同之处在于实例化语法和函数方法
定义一个结构与C语言中学到的一样,实例化时就像之前swift学到的函数调用
与C语言另一个不同之处是swift的结构体中可以写函数方法,而C语言不能
构造函数会自动添加一个初始化所有属性的构造方法,比如刚才代码调用方式可以这样
值得注意的是 swift结构体是值类型,这里就不举例了
什么时候用结构呢?
来看看枚举
有其他语言基础的朋友们应该了解一些枚举,下面是枚举的定义语法
枚举怎么使用呢? 举个简单的例子
噢不 你说switch语法好像不太对?
是的swift中的switch语法不太一样 与C语言的区别在于 不需要break 满足条件执行 执行完毕自动退出,并且需要默认选项default 不写会报错,
只有在对枚举类型进行判断时只要把所有case可能性都写齐便可省略default
下面看枚举关联类型
相信大家通过代码都能看懂了枚举的每个case情况都可以关联一个或多个类型,要使用类型可以再switch case中定义变量 语法也很好记
原生值
默认情况下Int类型原生值会从0开始自增长 当然也可以在定义的时候去设置比如case X 之后的case会随你设置的数自增
.rawValue方法能访问原生值 当然原生值也能设置为其他类型 具体大家自己去试验
此时我们就需要在函数的前面加上mutating关键字进行修饰
在枚举中也是如此 修改self的值
不同之处在于实例化语法和函数方法
struct Point { var x = 0 var y = 1 mutating func change (newX:Int,newY: Int) { x = newX y = newY } } var p = Point() p.change(10, newY: 20) p.x
定义一个结构与C语言中学到的一样,实例化时就像之前swift学到的函数调用
与C语言另一个不同之处是swift的结构体中可以写函数方法,而C语言不能
构造函数会自动添加一个初始化所有属性的构造方法,比如刚才代码调用方式可以这样
var p1 = Point(x: 5, y: 6)
值得注意的是 swift结构体是值类型,这里就不举例了
什么时候用结构呢?
当一个或一组值类型,其中的元素和属性未来不会更改时用结构 其他时候建议用类 calss
来看看枚举
有其他语言基础的朋友们应该了解一些枚举,下面是枚举的定义语法
enum Gender { case Male case Female }
枚举怎么使用呢? 举个简单的例子
enum Gender { case Male case Female } let weidong: Gender = .Male switch weidong { case .Male: print("男人") case Gender.Female: print("女人") }
噢不 你说switch语法好像不太对?
是的swift中的switch语法不太一样 与C语言的区别在于 不需要break 满足条件执行 执行完毕自动退出,并且需要默认选项default 不写会报错,
只有在对枚举类型进行判断时只要把所有case可能性都写齐便可省略default
下面看枚举关联类型
enum Gender { case Male(String) case Female(Int,String) //表示可以关联任意类型,每个case关联的数据可以不一样 } let wd = Gender.Male("男") switch wd { case .Male(let x): print("zhe shi ge \(x)") case .Female: print("nv") } let hy = Gender.Female(18, "zhanghongyan") switch wd { case .Male(let x): print("zhe shi ge \(x)") case let .Female ( x , y): //相当于x与y都是let print("nv") }
相信大家通过代码都能看懂了枚举的每个case情况都可以关联一个或多个类型,要使用类型可以再switch case中定义变量 语法也很好记
原生值
enum Status :Int{ //原生值,所有原生值都必须唯一 case UnApproved case Approved case X = 4 //=1 就报错 case Y case XX } // let goods = Status.X goods.rawValue let goods1 = Status.UnApproved goods1.rawValue
默认情况下Int类型原生值会从0开始自增长 当然也可以在定义的时候去设置比如case X 之后的case会随你设置的数自增
.rawValue方法能访问原生值 当然原生值也能设置为其他类型 具体大家自己去试验
关键字mutating 当结构中有函数方法 函数方法又要修改结构中某一属性的值时 编译器会抛出错误
struct s{ var a=0 var b=0 func set(a:Int,b:Int){ self.a=a self.b=b } }
此时我们就需要在函数的前面加上mutating关键字进行修饰
在枚举中也是如此 修改self的值
enum TriStateSwitch { case Off, Low, High mutating func next() { switch self { case Off: self = Low case Low: self = High case High: self = Off } } }
相关文章推荐
- swift函数格式
- Swift关于Array的探讨
- swift中fallthrough的作用
- Swift 自己写定时器
- Swift基本语法快速一览
- swift 利用协议进行值传递
- swift 利用协议进行值传递
- Swift自学_数据类型
- swift之枚举
- swift 快速奔跑的兔几 本节的内容是:使用文件系统存储数据
- swift 快速奔跑的兔几 本节的内容是:数据存储NSUserDefaults
- swift之闭包(closure)
- swift 快速奔跑的兔几 本节的内容是:照片库 第二说
- swift 内存管理,WEAK 和 UNOWNED
- 理解 OpenStack Swift (3):监控和一些影响性能的因素 [Monitoring and Performance]
- swift 快速奔跑的兔几 本节的内容是:使用照片库
- swift循环
- swift之函数(functions)
- swift 自定义购物车计数器
- swift 快速奔跑的兔几 本节的内容是:用AVAdioPlayer播放声音 语音合成