Can an enum contain another enum values in Swift?

前端 未结 2 1569
感动是毒
感动是毒 2020-12-20 13:48

I\'d like to share some enum properties. Something like:

enum State {
  case started
  case succeeded
  case failed
}

enum ActionState {
  include State //          


        
2条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-20 14:13

    Details

    • Swift 4, 3
    • Xcode 10.2.1 (10E1001), Swift 5 (Last revision of this post)

    Solution

    enum State {
        case started, succeeded, failed
    }
    
    enum ActionState {
        case state(value: State), cancelled
    }
    
    class Action {
        var state: ActionState = .state(value: .started)
        func set(state: State) { self.state = .state(value: state) }
        func cancel() { state = .cancelled }
    }
    

    Full Sample

    Do not to forget to paste the solution code

    import Foundation
    
    extension Action: CustomStringConvertible {
        var description: String {
            var result = "Action - "
            switch state {
                case .state(let value): result += "State.\(value)"
                case .cancelled: result += "cancelled"
            }
            return result
        }
    }
    
    let obj = Action()
    print(obj)
    obj.set(state: .failed)
    print(obj)
    obj.set(state: .succeeded)
    print(obj)
    obj.cancel()
    print(obj)
    

    Result

    //Action - State.started
    //Action - State.failed
    //Action - State.succeeded
    //Action - cancelled
    

提交回复
热议问题