在使用数组的时候,最常见的异常就是数组越界了,为了避免在开发的时候出现越界的情况,写了几个扩展的方法,用于缓减越界的发生。
import Foundation
//MARK:安全索引
extension Array{
/// 自定义下标写法
/// subscript用于更方便的访问集合中的数据
/// indices.contains用于判断索引值是否在区间类
/// - Parameter index: 索引值
public subscript(safe index:Int) ->Element?{
if(indices.contains(index)){
return self[index];
}else{
return nil;
}
}
/// 普通写法
///
/// - Parameter index: 索引值
/// - Returns:
public func indexSafe(index:Int) ->Element?{
if(index > 0 && index < count){
return self[index];
}
return nil;
}
}
// MARK: - 索引
extension Array where Element : Equatable {
/// 获取数组中的指定元素的索引值
///
/// - Parameter item: 元素
/// - Returns: 索引值数组
public func indexes(of item: Element) -> [Int] {
var indexes = [Int]()
for index in 0..<count where self[index] == item {
indexes.append(index)
}
return indexes
}
/// 获取元素首次出现的位置
///
/// - Parameter item: 元素
/// - Returns: 索引值
public func firstIndex(of item: Element) -> Int? {
for (index, value) in lazy.enumerated() where value == item {
return index
}
return nil
}
/// 获取元素最后出现的位置
///
/// - Parameter item: 元素
/// - Returns: 索引值
public func lastIndex(of item: Element) -> Int? {
return indexes(of: item).last
}
}
//MARK:删除
extension Array where Element : Equatable {
/// 删除数组中的指定元素
///
/// - Parameter object: 元素
public mutating func remove(object:Element) -> Void {
for idx in self.indexes(of: object).reversed() {
self.remove(at: idx)
}
}
}
网友评论