Swift的枚举在功能上比OC强了很多,在Swift中枚举更倾向于类了
常规用法
enum NormalType: String {
case aaa = "ccc"
case bbb
case 中文
}
let type = NormalType.aaa
print(type.rawValue)
成员变量,方法及协议
enum有了方法在很多时候显得很方便,例如我们定义通知方法时:
enum NotificationName: String {
case notify1
case notify2
var name: Notification.Name {
return Notification.Name.init(self.rawValue)
}
func postNotify(_ userInfo: [String: Any]?) {
NotificationCenter.default.post(name: self.name, object: nil, userInfo: userInfo)
}
}
NotificationName.notify1.postNotify(nil)
内部枚举
有时候我们定义一类枚举时,可以将多个枚举归为一类,形成内部枚举
例如:猫狗都是宠物,猫又有很多种,狗又有很多种,这时候就可以使用内部枚举了
enum Pet {
enum Dog: String {
case 哈士奇
case 土狗
case 牧羊犬
}
enum Cat: String {
case 蓝猫
case 橘猫
case 短毛猫
}
}
let sampleDog = Pet.Dog.土狗
print(sampleDog.rawValue)
相关值
相关值是swift语法enum的一大亮点,有时候我们定义枚举时,枚举里部分为string,部分为int,部分为image,部分为.......这个时候,枚举的相关性可以完美解决这个问题。
enum TestType {
case text(String)
case image(UIImage)
case number(Int)
}
//赋值及取值的用法
let test = TestType.text("hello world")
if case let TestType.text(str) = test {
if str == "hello world" {
print(str)
}
}
switch test {
case .text(let str):
print(str)
case .image(let img):
print(img)
case .number(let num):
print(num)
}