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
网友评论