2

特定のインデックスのオブジェクトのみを返すように配列を拡張しようとしています。ここでは、マップ機能が私にとって最良の選択であるように思われました。

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]

ここに画像の説明を入力

非オプションの配列を返す方法はありますか? [要素]を返そうとしましたか? 拡張機能から。これは同じエラーをスローします。

4

1 に答える 1

2

次のコードは、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
    }
}
于 2015-11-26T23:12:27.310 に答える