美文网首页
swift学习之枚举

swift学习之枚举

作者: 天蚕 | 来源:发表于2016-05-13 18:17 被阅读313次

    相比OC的枚举类型,swift的枚举类型就方便的多,OC的枚举类型成员属性只能是整数NSInterger(C语言的枚举就是一对整形常量的集合),而swift没有这样限制,更不会像OC那样隐式给成员赋值整数,在不指定类型的情况下,swift的枚举成员本身就是值

    普通枚举

    定义格式

    enum 枚举类型名称:(可有可无的成员类型)
    {
        case 枚举成员1
        case 枚举成员2
        ...
        case 枚举成员n
    }
    
    enum 枚举类型名称
    {
        case 枚举成员1,枚举成员2,...,枚举成员n
    }
    //用户身份类型
    enum UserIdentityType
    {
        case UserIdentityTypeNone
        case UserIdentityTypeNormal
        case UserIdentityTypeCourier
        case UserIdentityTypeSeller
    }
    
    var userType:UserIdentityType = .UserIdentityTypeCourier
    

    原始值(成员是常量)

    raw value
    其实就是枚举类型规定成员类型
    定义格式:

    enum 枚举类型名称:成员类型
    {
        case 枚举成员1=1
        case 枚举成员2=2
        ...
        case 枚举成员n=n
    }
    上边的成员的值不用是连续的
    这样的定义就会给枚举类型提供一个新的构造方法
    枚举类型名称(rowValue:输入值)
    
    enum NetworkError:String 
    {
        case NetworkErroLogic = "这是一个逻辑错误,网络请求成功"
        case NetworkErrorRequest = "这是一个网络请求错误"
    }
    
    let networkError:NetworkError = .NetworkErrorRequest
    
    print(networkError)
    
    print(networkError.rawValue)
    
    

    带有关联值的枚举(成员是可以关联多个值,可以认为是关联一个元组,关联值枚举不能申明为rawValue,这个家伙的成员是一个常量,一经定义不能再变的,关联枚举的关联值是可变的,决定着他本身是可变的)

    带有关联值的枚举的成员都会带有额外的信息
    定义格式

    enum 枚举类型名称
    {
        case 枚举成员1(关联值1)
        case 枚举成员2(关联值2)
        ...
        case 枚举成员n(关联值3)
    }
    
    //alamofire事例
    public enum Result<Value, Error: ErrorType> {
        case Success(Value)
        case Failure(Error)
    
        /// Returns `true` if the result is a success, `false` otherwise.
        public var isSuccess: Bool {
            switch self {
            case .Success:
                return true
            case .Failure:
                return false
            }
        }
    
        /// Returns `true` if the result is a failure, `false` otherwise.
        public var isFailure: Bool {
            return !isSuccess
        }
    
        /// Returns the associated value if the result is a success, `nil` otherwise.
        public var value: Value? {
            switch self {
            case .Success(let value):
                return value
            case .Failure:
                return nil
            }
        }
    
        /// Returns the associated error value if the result is a failure, `nil` otherwise.
        public var error: Error? {
            switch self {
            case .Success:
                return nil
            case .Failure(let error):
                return error
            }
        }
    }
    
    

    枚举结合范型

    定义格式

    enum 枚举类型名称<T1,T2...,Tn>
    {
        case 枚举成员1(T1类型关联值1)
        case 枚举成员2(T2类型关联值2)
        ...
        case 枚举成员n(Tn类型关联值3)
    }
    

    关联值提取

    在switch语法的case中要使用关联值就必须将关联值提取出来作为switch语句的一部分。可以在switch的 case 分支代码中提取每个关联值作为一个常量(用let前缀)或者作为一个变量(用var前缀)来使用,多个关联值之间用逗号隔开。如果有多个关联值都作为常量或者都作为变量提取,通常将let或者var提到case关键字后面。

    enum Trades {
        case Buy(stock: String, amount: Int, stockPrice: Float)
        case Sell(stock: String, amount: Int, stockPrice: Float)
    }
    
    let trade = Trades.Buy(stock: "100", amount: 20, stockPrice: 10.0)
    
    switch trade {
    //case .Buy(let stock,let amount,let stockPrice):
    case let .Buy(stock,amount,stockPrice):
        print("\(stock)" + "," + "\(amount)" + "," + "\(stockPrice)");
    default:
        print("sdfds");
    }
    

    枚举递归

    indirect enum NetWorkResult {
    case Success(Int)
    case failure(String)
    case Result(NetWorkResult)
    }

    相关文章

      网友评论

          本文标题:swift学习之枚举

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