extension Array {
    private func reorderAndNormalized(swapElement indexA: Int, withElement indexB: Int, normalizeBlock: ((Int, Element) -> Element)) -> [Element]? {
        guard indexA >= 0 && indexA < count else { return nil }
        guard indexB >= 0 && indexB < count else { return nil }
        
        var newItems = self
        (newItems[indexA], newItems[indexB]) = (newItems[indexB], newItems[indexA])
        
        
        return newItems.enumerate().map { index, item in
            return normalizeBlock(index, item)
        }
    }
}