美文网首页
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

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

  • iOS 数组越界处理 Swift & OC

    Swift: 扩展 Array 使用时: OC: 创建NSArray 的Category:1> Xcode 中 C...

  • 数组的扩展、对象的扩展

    一、数组的扩展...a叫做rest参数 二、Array.from().of()Array.from方法用于将两类对...

  • ES6&数组扩展

    ES6数组扩展 1.Array.from() 定义:Array.from()用于将两类对象转换成真正的数组:类数组...

  • swift的一些特性

    关于swift 的一些特性收集了一些资料和链接一、Swift语言的类扩展是一个强大的工具,我们可以通过类扩展完成如...

  • 数组的扩展

    数组的扩展 扩展运算符...Array类似 ...restrest参数的逆运算,所有实现iterator接口的类数...

  • swift扩展

    扩展 Swift中的扩展,有点类似于OC中的分类(Category) 扩展作用 扩展可以为枚举、结构体、类、协议添...

  • Swift入门基础6——扩展、泛型、协议

    扩展 Swift中的扩展,对应OC中的分类,可以用它来拓展类的功能。 可以扩展类的什么: 添加新的属性(只能是计算...

  • Swift 的扩展和封装代码举例

    Swift 的扩展和封装代码举例1.扩展是向一个已有的类、结构体或枚举类型添加新的功能(在swift中扩展没有名字...

  • js 学习 -- 03

    引用类型(Object 和 Array) 引用类型,也即是类,java、 oc、 swift等面向对象的类的概念。...

网友评论

      本文标题:swift扩展类-Array

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