/**************************枚举************************/
//用enum 并把定义放在大括号内,枚举中被定义的值为枚举成员,case 关键字表示新定义的一行成员,在 swift 中可以将枚举成员声明为不同类型的实例值
//不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值,case关键词表明新的一行成员值将被定义
//Rank 为枚举类型,而 Int 为枚举原始值类型
enum Rank: Int {
case Ace = 0
case One, Two, Three, Four, Five
case Jack, Queen, King
func simpleDescription() -> String {
//因为 self 为 Rank 类型,所以可以使用点语法
switch self {
case Rank.Ace:
return "ace"
case .Jack:
return "jack"
case Rank.Queen:
return "queen"
case Rank.King:
return "king"
default:
return String(self.toRaw())
}
}
func comparse(other: Rank) -> Bool {
if self.toRaw() > other.toRaw(){
return true
}else{
return false
}
}
}
//将 ace 定义为 Rank类型后,可直接只用点操作符再为其赋值(其他的枚举值)
var ace = Rank.Ace
ace = .Jack
//现在 ace = Jack,调用simpleDescription()方法
ace.simpleDescription()
//使用 toRaw 和 fromRaw 在原始值和枚举值之间进行转换
let aceRawValue = ace.toRaw()
let test = Rank.fromRaw(1)
//创建2个 Rank 类型的变量
var rank1 = Rank.One
var rank2 = Rank.Two
if rank1 .comparse(rank2){
println("因为 rank1的原始值大于 rank2的原始值,所以 rank1的枚举值大于 rank2的枚举值")
}else{
println("反之")
}
if let convertedRank = Rank.fromRaw(3) {
convertedRank //Enum Value 表示该值为枚举值
let threeDescription = convertedRank.simpleDescription()
}
/**************************结构体************************/
//使用 struct 来创建一个结构体 结构体是传值,而类是传引用
//一个枚举类型的实例可以有实例值,相同枚举类型的实例可以有不同的值,创建实例的时候传入值即可,实例值与原始值是不同的,枚举成员的原始值相对于所有的实例都是相同的,而你是在定义枚举的时候设置原始值。
/**************************接口和扩展************************/
//使用protocol 来声明一个接口 类,枚举,结构体都可以实现接口
//使用extension来声明一个扩展
//mutating 关键字用来标记一个会修改结构体的方法