#!/usr/local/bin/swift enum NestedArray { case V(Element) case A([NestedArray]) } var na:NestedArray = .A([ .V(0), .V(1), .A([.V(2), .V(3)]) ]) extension NestedArray { var value:Element? { switch self { case let .V(v): return v default: return nil } } var array:[NestedArray]? { switch self { case let .A(a): return a default: return nil } } } print(na.array?[0].value)