美文网首页
swift扩展类-Array

swift扩展类-Array

作者: 小角色被占用 | 来源:发表于2018-08-21 16:15 被阅读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)
            }
        }
    }

    相关文章

      网友评论

          本文标题:swift扩展类-Array

          本文链接:https://www.haomeiwen.com/subject/exsjiftx.html