當一個變量有固定的幾個取值的時候,建議用枚舉,比如說星期,月份等….
// 枚舉類型定義的資料類型的取值,隻能是 case 後面的取值
enum weekDay:String{
case Monday
case Tuesday
case Wedesday
case Thursday
case Friday
case Saturday = "星期六"
case Sunday
}
var dayone = weekDay.Friday
// 如果要改變 dayone 的值,用.就可以通路
dayone = .Monday
// 如果string 類型的枚舉,.case 沒有設定原始值的話,預設就是 case 的名字
// 用. rawValue 通路原始值
let r = dayone.rawValue
print(r)
//如果設定了初始值,就會輸出設定的初始值
dayone = .Saturday
print(dayone.rawValue)
//:## switch 語句比對枚舉值
// dayone 是接收枚舉類型的值的一個變量,改變它的值,用.文法就可以了,,如果不是比對所有的情況,要加 default
var dayTwo = weekDay.Tuesday
switch dayTwo {
case .Monday:
print("星期一")
case .Tuesday:
print("星期二")
default:
print("其他")
}
新特性 相關值
enum CustTime{
case AM(hour:Int,minute:Int)
case PM(hour:Int,minute:Int)
case zero
}
var mytime = CustTime.AM(hour: 8, minute: 20)
switch mytime {
case .AM(let myhour,let myminute):
print("現在是上午\(myhour)點\(myminute)分")
case .PM(let myhour,let myminute):
print("現在是下午\(myhour)點\(myminute)分")
case .zero:
print("0點")
}
// 枚舉中聲明一個方法,
enum CustTime1{
case AM(hour:Int,minute:Int)
case PM(hour:Int,minute:Int)
case zero
func saytime() {
switch self {
case .AM(let myhour,let myminute):
print("現在是上午\(myhour)點\(myminute)分")
case .PM(let myhour,let myminute):
print("現在是下午\(myhour)點\(myminute)分")
case .zero:
print("0點")
}
}
}
var mytime1 = CustTime1.AM(hour: 8, minute: 20)
var yourtime = CustTime1.PM(hour: 4, minute: 28)
// 這個時候誰調用,方法中的 self 指的就是誰
mytime1.saytime()
yourtime.saytime()
// 枚舉擴充,和 oc 中的類擴充功能差不多,用 extension 關鍵字
extension CustTime{
func pritTime(){
switch self {
case .AM(let myhour,let myminute):
print("現在是上午\(myhour)點\(myminute)分")
case .PM(let myhour,let myminute):
print("現在是下午\(myhour)點\(myminute)分")
case .zero:
print("0點")
}
}
}
mytime.pritTime()