Swift 2.1 数组扩展objectsAtIndexes
Swift 2.1 Array Extension objectsAtIndexes
我正在尝试将数组扩展到 return 仅某些索引处的对象。地图功能似乎是我在这里的最佳选择。
extension Array {
func objectsAtIndexes(indexes: [Int]) -> [Element?]? {
let elements: [Element?] = indexes.map{ (idx) in
if idx < self.count {
return self[idx]
}
return nil
}.filter { [=11=] != 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]
有什么方法可以 return 非可选数组吗?我试过return [元素]?从扩展功能。
这会引发相同的错误。
以下代码使用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{ [=10=] }
return elements
}
}
我正在尝试将数组扩展到 return 仅某些索引处的对象。地图功能似乎是我在这里的最佳选择。
extension Array {
func objectsAtIndexes(indexes: [Int]) -> [Element?]? {
let elements: [Element?] = indexes.map{ (idx) in
if idx < self.count {
return self[idx]
}
return nil
}.filter { [=11=] != 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]
有什么方法可以 return 非可选数组吗?我试过return [元素]?从扩展功能。 这会引发相同的错误。
以下代码使用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{ [=10=] }
return elements
}
}