枚举的定义和使用
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 { //也可以用可选绑定 }