美文网首页
swift-enum

swift-enum

作者: g_h_j | 来源:发表于2020-06-11 16:07 被阅读0次

/*

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

    }

}

相关文章

  • swift-enum

    /* Swift枚举中支持以下四种关联值类型: 整型(Integer) 浮点数(Float Point) 字符串(...

  • Swift-enum

    OC Swift 原始值 Raw Values 隐式原始值 Implicitly Assigned Raw Val...

网友评论

      本文标题:swift-enum

      本文链接:https://www.haomeiwen.com/subject/tpibtktx.html