Swift 数组字典安全操作防越界崩溃扩展类目

swift开发中会遇到一些optional字段,
处理的时候需要大量的判断,
有时候疏忽就会发生崩溃。
比如数组越界,或者插入了nil的对象,
怎么才能像oc一样灵活的处理optional value?


Swift Array 的安全操作

给数组添加扩展
下面代码可以省去optional的判断

extension Array {
    mutating func add(_ safeObject : Iterator.Element?) {
        if let o = safeObject {
            self.append(o)
        }else{
            print("Warning! Array:\(self) add an nil element")
        }
    }
}

添加下标延展
防止数组越界

    subscript (safe index: Index) -> Iterator.Element? {
        return indices.contains(index) ? self[index] : nil
    }

或者写一个OC风格的方法
返回一个optional value

  func objectAt(_ index : Int) -> Iterator.Element? {
        if index < self.count {
            return self[index]
        }else {
            print("Warning! Array:\(self) object index:'\(index)' out of bunds (0 , \(self.count))")
            return nil
        }
    }

Swift Dictionary 的安全操作

下面是字典的安全插入

    mutating func set(_ key : Dictionary.Key , _ value : Dictionary.Value?) {
        if let o = value {
            self[key] =  o
        } else {
            print("Warning! Dictionary:\(self) append an nil value key is '\(key)'")
        }
    }

还有一些其他类型转换的方法

不同类型的值直接转换

       let list2 = [123,232,231,213]
        //number数组转String
       let _ = list2.stringAt(0)

     var dict = ["name" : "adw" , "age" : "12" ]
        //不同类型互相转换
        let _ = dict.string("name")
        //log: Warning! Dictionary:["name": "adw", "age": "12"] int for key:'name' value:'adw' is not cover to Int!
        let _ = dict.int("name")

还有一些其它扩展
详细的请看demo
喜欢的点个Star

demo地址:
传送门
https://github.com/xujiyao123/SwitCollectionsSafeAccess

你可能感兴趣的:(Swift 数组字典安全操作防越界崩溃扩展类目)