这儿每天共享一个 iOS 的新知识,快来重视我吧

前语

在 swift 中咱们经常运用到字典(Dictionary),当用下标取值时,为了安全,取出的值是可选类型,比如:

letuser:[String:String]=["name":"iOS新知"]
print(user["name"])

这段代码打印 Optional("iOS 新知")。但有的时候往往可选值不是咱们想要的,其实 swift 有提供一个办法来设置默许值。

取值时设置默许值

当咱们检查 Dictionary 的声明部分,会看到这么一个办法:

subscript(key:Key,defaultdefaultValue:@autoclosure()->Value)->Value

这个下标办法支持用下标取值的同时设置一个默许值的,当所取的 key 不存在时,回来保底的 default 值,例如,当我取 “name” 时,假如 name 不存在,则默许输出 “iOS 新知”,那么能够这么做:

letuser:[String:String]=[:]
print(user["name",default:"iOS新知"])

上边的代码打印 “iOS 新知”,这个办法会自动把可选类型解包,回来的值不再是可选类型。

这个办法其实不太会用到,由于大多数情况咱们会运用双问号 ?? 运算符来设置保底值:

letuser:[String:String]=[:]
print(user["name"]??"iOS新知")

这段代码和运用 user["name", default: "iOS 新知"] 的作用是一样的。

或许有用的当地?

由于在字典中,下标办法不只能够用作取值,也能用作设置值,因此我想到了一个或许的场景。

比如我的字典 ages 存储一切用户的年纪,key 为用户名,value 为年纪,有一个操作是让年纪 + 1,但这个字段有或许不存在,不存在时从 0 开始,那么正常的思路或许是这样的:

varages:[String:Int]=["swift":5]
//先把值取出来,不存在默许为0
letappleAge=ages["apple"]??0
//加一后再存起来
ages["apple"]=appleAge+1

这个需求能够用 subscript(key: default:) 办法简化:

varages:[String:Int]=["swift":0]
ages["swift",default:0]+=1

这种写法相对来说可读性更好,也更简单。

这儿每天共享一个 iOS 的新知识,快来重视我吧

本文同步自微信公众号 “iOS新知”,每天准时共享一个新知识,这儿只是同步,想要及时学到就来重视我吧!