枚举与可选值

枚举的定义和使用

enum Gender {
   case Male
   case Female //两种情况
   
}
let kangkang: Gender = .Male //用枚举

switch kangkang {
case .Male:
   print("nan ren")
case Gender.Female:
   print("nv")
}  //用枚举来判断

用枚举后面可以存数据

 

enum Gender {
   case Male(String)
   case Female(Int,String)  //表示可以关联任意类型,每个case关联的数据可以不一样

}

let kang = Gender.Male("") //存了一个男人,int类型不用""号
switch kang {
case .Male(let x):
   print("zhe shi ge \(x)")
case .Female:
   print("女")
}

枚举的下标默认重0开始,并且下标不能重复,否则报错。

enum Status :Int{ //原生值,所有原生值都必须唯一
   case  UnApproved
   case Approved
   case X = 5  //=1 就报错
   case Y
   case XX
   
}

let goods = Status.Approved
goods.rawValue

声明一个可选值,可选值就是可以不给值,默认有一个值

var str: String? = "asdfasdf" //str是一个可以设置nil的String    

//enum Optional{case None case Some}
str = nil
let i: Int?  //如果声明的时候不赋值,默认就是nil
//str.startIndex//会报错,因为此时str不是一个真正的String,所以没有startIndex

两种方法解决optional的问题

var str = "asddas"
str = nil
//
第一种 str!.startIndex //强制变为String //第二种,optional binding if let s = str { print("\(s)") } else { print("str 是nil值") }

隐式的解封

var str2: String! = "sadf" //称之为隐式的解封(implicitly unwrapped)
//str2 = nil

str2.startIndex

optional chain 可选链

class Person {
    var ci: ClassInfo?
}
class ClassInfo {
    var t:Teacher?
}
class Teacher {
    var name = "cj"
}
let p = Person()
let t = Teacher()
let ci = ClassInfo()
ci.t = t
p.ci = ci
p.ci?.t?.name = "double zhang "
p.ci?.t?.name
p.ci!.t!.name  //可以强制解封
if let n = p.ci?.t?.name { //也可以用可选绑定
    
}

 

posted @ 2015-11-09 20:29  爱学习~天天学习  阅读(286)  评论(0编辑  收藏  举报