swift扩展类-Array

2018-08-21  本文已影响0人  小角色被占用

在使用数组的时候,最常见的异常就是数组越界了,为了避免在开发的时候出现越界的情况,写了几个扩展的方法,用于缓减越界的发生。

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)
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读