天天看點

swift學習筆記(20)-枚舉

當一個變量有固定的幾個取值的時候,建議用枚舉,比如說星期,月份等….

// 枚舉類型定義的資料類型的取值,隻能是 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()           
上一篇: 挖坑

繼續閱讀