【问题标题】:Swift 2.1 Array Extension objectsAtIndexesSwift 2.1 数组扩展对象AtIndexes
【发布时间】:2015-11-26 22:37:16
【问题描述】:

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

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]

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

【问题讨论】:

    标签: arrays swift2 swift-extensions


    【解决方案1】:

    以下代码使用 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多