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

先看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 } } }

 

posted @ 2015-11-17 20:08  孤独De灵魂  阅读(165)  评论(0编辑  收藏  举报