Объекты расширения массива Swift 2.1AtIndexes

Я пытаюсь расширить массив, чтобы возвращать только объекты с определенными индексами. Функция карты показалась мне здесь лучшим выбором.

extension Array {

    func objectsAtIndexes(indexes: [Int]) -> [Element?]? {
        let elements: [Element?] = indexes.map{ (idx) in
            if idx < self.count {
                return self[idx]
            }
            return nil
        }.filter { $0 != nil }
        return elements
    }
}

let arr = ["1", "2", "3", "4", "5"]
let idx = [1,3,5]

let x = arr.objectsAtIndexes(idx) //returns: [{Some "2"}, {Some "4"}]

Я получаю ошибку EXC_BAD_INSTRUCTION, когда пытаюсь преобразовать результат в массив строк:

let x = arr.objectsAtIndexes(idx) as? [String]

введите здесь описание изображения

Есть ли способ вернуть массив необязательных параметров? Я пытался вернуть [Элемент]? из функции расширения. Это выдает ту же ошибку.


person Ron    schedule 26.11.2015    source источник


Ответы (1)


Следующий код решает проблему для Swift2.1 с помощью функции плоской карты.

extension Array {

    func objectsAtIndexes(indexes: [Int]) -> [Element] {
        let elements: [Element] = indexes.map{ (idx) in
            if idx < self.count {
                return self[idx]
            }
            return nil
            }.flatMap{ $0 }
        return elements
    }
}
person Ron    schedule 26.11.2015