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)
}
}