/*
Swift枚举中支持以下四种关联值类型:
整型(Integer)
浮点数(Float Point)
字符串(String)
布尔类型(Boolean)
*/
//写法1
enum TestEnum{
casetest1
casetest2
}
//写法2
enum TestEnumInt:Int{
casetest1=0
casetest2
}
////写法3 嵌套
enum Chr {
enumWeapon{
caseBow
caseSword
caseLance
caseDagger
}
enumHelmet{
caseWooden
caseIron
caseDiamond
}
caseThief
case Warrior
case Knight
}
////写法4 泛型1
enum Rubbish<T1,T2> {
case rubbish1(T1)
case rubbish2(T2)
funcgetRubbish() ->T1? {
switchself{
case.rubbish1(letvalue):
returnvalue
default:
returnnil
}
}
}
//写法5 泛型2
@frozen public enum Rubbish3<Success1, Failure1> where Failure1 : Error{
}
//写法6 迭代
//indirect间接类型是 Swift 2.0 新增的一个类型。 它们允许将枚举中一个 case 的关联值再次定义为枚举
enum FileNode {
caseFile(name:String)
indirectcaseFolder(name:String, files: [FileNode])
}
//写法7
enum Device{
case iPad, iPhone, AppleTV
case AppleWatch
caseBuy(stock:String,amount:Int)
caseSell(stock:String,amount:Int)
}
//写法8 扩展,遵循协议
extension Device :CustomStringConvertible{
//协议接口
var description: String{//CustomStringConvertible 协议
switchself{
case.Buy(_,_):
return"Buy"
case.Sell(_,_):
return"Sell"
default:
return"Device"
}
}
//能够创建计算属性。当然,计算属性的内容都是建立在枚举值下或者枚举关联值得到的。
varyear:Int{
switchself{
case.iPhone:
return2007
case.iPad:
return2010
default:
return2020
}
}
//枚举中的方法为每一个enum case而“生”。所以倘若想要在特定情况执行特定代码的话,你需要分支处理或采用switch语句来明确正确的代码路径。
funcintroduced() ->String{
switchself{
case.iPad:
return"iPad"
case.iPhone:
return"iPhone"
case.AppleTV:
return"AppleTV"
case.AppleWatch:
return"AppleWatch"
case.Buy(letstock,letamount):
return"Buy \(stock) \(amount)"
case.Sell(letstock,letamount):
return"Sell \(stock) \(amount)"
}
}
//方法可以声明为mutating,这样就允许改变隐藏参数self的case值
mutating func next() {
switchself{
case.iPad:
self= .AppleTV
case.iPhone:
self= .AppleWatch
case.AppleTV:
self= .iPad
default:
self= .AppleTV
}
}
//运算符重载
staticfunc==(lhs:Device, rhs:Device) ->Bool{
switch(lhs, rhs) {
caselet(.Buy(stock1, amount1), .Buy(stock2, amount2))
wherestock1 == stock2 && amount1 == amount2:
returntrue
caselet(.Sell(stock1, amount1), .Sell(stock2, amount2))
wherestock1 == stock2 && amount1 == amount2:
returntrue
default: return false
}
}
//静态函数
staticfuncfromSlang(term:String) ->Device? {
ifterm =="iWatch"{
return.AppleWatch
}
returnnil
}
//构造函数
init?(term:String) {
ifterm =="iWatch"{
self= .AppleWatch
}
return nil
}
}