[IOS] flatMap 또는 compactMap을 사용하여 이전 데이터를 함께 전달 하는 방법

Swift에서도 flatMap 또는 compactMap을 사용하여 이전 데이터를 함께 전달할 수 있습니다. Swift의 배열(Array)은 제네릭 타입이므로, 튜플(Tuple)이나 클래스(Class)를 사용하여 여러 값을 묶어서 반환할 수 있습니다.

아래는 Swift에서 flatMapcompactMap을 사용하여 이전 데이터를 같이 전달하는 예시입니다:

1. 튜플(Tuple) 사용하기:

let numbers = [1, 2, 3]

let result = numbers.flatMap { number -> [(Int, Int)] in
    let previousValue = number - 1
    return [(previousValue, number)]
}

print(result) // 출력: [(0, 1), (1, 2), (2, 3)]` 

2. 클래스(Class) 사용하기:

class DataWithPrevious {
    let previous: Int
    let current: Int
    
    init(previous: Int, current: Int) {
        self.previous = previous
        self.current = current
    }
}

let numbers = [1, 2, 3]

let result = numbers.compactMap { number -> DataWithPrevious? in
    let previousValue = number - 1
    return DataWithPrevious(previous: previousValue, current: number)
}

print(result) // 출력: [DataWithPrevious(previous: 0, current: 1), DataWithPrevious(previous: 1, current: 2), DataWithPrevious(previous: 2, current: 3)]` 

flatMap의 경우 배열을 평면화하는데 사용되므로, 튜플 형태로 데이터를 반환하면 중첩 배열이 평면화됩니다. compactMap은 옵셔널 값을 제거하는데 사용되므로, 클래스 형태로 데이터를 반환하여 nil 값을 제거할 수 있습니다.

Swift에서는 튜플이나 클래스 외에도 구조체(Struct) 등을 사용하여 데이터를 묶을 수 있으므로, 상황에 맞게 가장 적절한 방식을 선택하여 사용하시면 됩니다.