Any 에서 각 타입별로 구분처리하기

곰튀김·2022년 7월 22일
0

[String: Any] 타입으로 만들어진 데이터를 각 타입별로 별도의 api 를 호출해야 할 때 구분하기

let d: [String: Any] = [
    "int": 42,
    "double": 3.14,
    "bool": true,
    "date": Date(),
    "string": "Hello World",
    "dateString": "2022-07-22T13:14:15+09:00",
]

이렇게 있을 때, value의 type 에 따라 다르게 처리해야할 때가 있다.
type으로 캐스팅 해보는 방식으로 처리하기.

주의할것! JSON 으로 date 가 전달될 때는 String 으로 올 수 있기 때문에 dateformat 까지 확인해줘야 한다.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

d.forEach { k, v in
    switch v {
    case let b as Bool:
        print("\(k) = [Bool](\(b))")
    case let d as Double:
        print("\(k) = [DOUBLE](\(d))")
    case let i as Int:
        print("\(k) = [INT](\(i))")
    case let d as Date:
        print("\(k) = [Date](\(d))")
    default:
        let s = "\(v)"
        if let d = dateFormatter.date(from: s) {
            print("\(k) = [Date](\(d))")
        } else {
            print("\(k) = [String](\(s))")
        }
    }
}

맨 마지막에는 String으로 퉁 치기. 하지만 전에 dateformat 확인하기.

profile
사실주의 프로그래머

0개의 댓글