arrays - Swift 2.1 数组扩展objectsAtIndexes

标签 arrays swift2 swift-extensions

我正在尝试扩展一个数组以仅返回某些索引处的对象。 map 功能似乎是我的最佳选择。

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]

enter image description here

有什么方法可以返回非可选数组吗?我尝试过返回[Element]?来自扩展功能。 这会引发相同的错误。

最佳答案

以下代码使用 flatmap 函数解决了 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
    }
}

关于arrays - Swift 2.1 数组扩展objectsAtIndexes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947928/

相关文章:

javascript - 数组推送时的本地存储错误

ios - 添加、重用和删除 NSLayoutAnchors

ios - Swift 2 jSON Call 可以抛出但未标有try

ios - 使用缓存中的图像创建图像数组 (Swift)

python - 如何平衡 numpy 数组中的类?

java - 具有最小冲突的两个整数数组的哈希函数

swift - UITextView 更改特定文本的文本颜色

swift - 如何在 Eureka SelectableSection 上进行适当的响应式(Reactive)扩展

ios - 一个错误? UIView 扩展中的属性

python - 对制表符分隔的文件执行计算