您的位置:首页 > 移动开发 > Swift

swift学习笔记->结构与枚举

2015-11-17 20:08 495 查看
先看swift的结构, 与C语言中学习的结构类似

不同之处在于实例化语法和函数方法

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
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: