extension CaseIterable where Self: RawRepresentable {

	// enum의 전체 값을 배열로 리턴
    static var allValues: [RawValue] {
        return allCases.map { $0.rawValue }
    }
    
    // 선택된 인덱스를 받아서 해당하는 enum 값을 리턴
    static func toValue(index: Int) -> Self? {
        if let selected = Self.allValues[safe: index] {
            return Self(rawValue: selected)
        }
        return nil
    }
}

 

사용방법

enum CountryGroupCode: String, CaseIterable {
    case Major
    case Asian
    case Europe
    case Oceania
    case MiddleEast
    case America
    case Africa
}

/*
  - TableView나 CollectionView 등에서 ContryGroupCode와 같은 데이터로 메뉴 구성하고
    클릭시 나오는 Index값으로 for문으로 검색해서 찾는 방식이 아니라 index값을 전달하면 해당
    데이터가 리턴되게 Extension 추가
*/

if let code = ContryGroupCode.toValue(index: 2) {
	print("code : \(code)")
    
    if code == .Europe {
    	// 코드 처리
    }
}

+ Recent posts