Programming/Swift(iOS)

Swift Enum - 2

홍열 2021. 4. 1. 20:58
728x90

enum 두번째 예제입니다.

 

아래 예제에서 arr를 순회하면서 출력하려면 arr의 요소에 따라서 분기하는 처리가 필요합니다. 

또한 'Any' 타입이기때문에 switch ~ case에서 항상 'default'가 붙어야 합니다.

let arr:[Any] = [
    Date(), "Hello", 100, 3.14]


for element in arr {
    switch element {
    case let v as Date:
        print("Date - \(v)")
    case let v as String:
        print("String - \(v)")
    case let v as Int:
        print("Int - \(v)")
    case let v as Float:
        print("Float - \(v)")
    default:
        print("unSupported type")

    }
}
for element in arr {
    switch element {
    case is Date:
        print("Date")
    case is String:
        print("String")
    case is Int:
        print("Int")
    case is Float:
        print("Float")
    default: //any는 어떤 타입도 포함할 수 있으므로 default추가
        print("unSupport Type")
    }
}

하지만 enum을 이용하면 좀 더 깔끔히 표현될 수가 있습니다. 

 

collection에 나올 수 있는 타입이 DataType으로 제한되기 때문에, case가 실패할 때를 대비하여 추가하는 'default'에 대한 부분이 필요가 없습니다.

enum DataType {
    case date(Date)
    case string(String)
    case int(Int)
    case float(Float)
}

let arr2:[DataType] = [.date(Date()), .string("Hello"), .int(42), .float(3.14)]

for ele in arr2 {
    //default를 사용안해도 되고, 타입캐스팅에 대해서 안정성 보장, unsupport type이 필요하지 않음
    switch ele {
    case let .date(date):
        print(date)
    case let .string(string):
        print(string)
    case let .int(int):
        print(int)
    case let .float(float):
        print(float)
	}
}