[swift] 옵셔널 타입을 사용하여 데이터 정렬하기

우리는 종종 데이터를 정렬해야 할 때가 있습니다. Swift에서는 이를 위해 Arraysort() 메소드를 사용할 수 있습니다. 그러나 때로는 데이터에 nil 값이 포함될 수 있기 때문에 옵셔널 타입을 사용하여 데이터를 정렬해야 할 수도 있습니다.

예시

다음은 Person이라는 구조체를 사용하여 사람의 이름과 나이를 나타내는 데이터를 보유한 배열을 가정합니다.

struct Person {
    let name: String
    let age: Int
}

let people: [Person?] = [Person(name: "John", age: 30), Person(name: "Sarah", age: nil), Person(name: "Mike", age: 25)]

위의 예시에서 people 배열에 nil로 표시된 나이가 없습니다.

옵셔널 타입의 데이터 정렬

만약 우리가 people 배열을 나이에 따라 오름차순으로 정렬하고 싶다고 가정합시다. 이 때 nil 값이 포함된 데이터를 어떻게 처리할 지를 결정해야 합니다.

let sortedPeople = people.sorted {
    guard let age1 = $0?.age, let age2 = $1?.age else {
        return false
    }
    return age1 < age2
}

위의 예시에서는 sorted() 메소드의 클로저 내에서 각각의 Person 객체의 age 옵셔널 타입 속성을 가지고 오고 있습니다. guard let 구문을 사용하여 나이 속성이 nil인 경우에는 무시하고 나이 값이 있는 경우에만 비교를 수행합니다.

결과적으로 sortedPeople 배열에는 People 객체가 나이에 따라 오름차순으로 정렬되어 있습니다. nil 값이 있는 경우에는 해당 객체가 정렬의 맨 마지막에 위치합니다.

결론

Swift에서 옵셔널 타입을 사용하여 데이터를 정렬하는 것은 간단한 작업입니다. sort() 메소드를 사용하면 됩니다. 그러나 nil 값이 포함된 데이터를 다루어야 하는 경우, nil 값을 처리하는 방법을 결정하고 해당 방법을 정렬 클로저에 구현해야 합니다.


참고자료