//: Playground - noun: a place where people can play
import UIKit
//字典也叫map 映射
//声明个空的字典
var Dict0 = Dictionary
Dict0.isEmpty //true
//可以直接给字典添加一个key和一个value
Dict0["笑"] = "smile"
//??运算符(类似三目运算符) 意思是当用这个键取到的值是nil的时候 可以付给其一个自己定义的值 即下面的"nothing" 只能用于optional形式的数据
print(Dict0["笑"] ?? "nothing")
//其中key是hashable的即哈希函数保存 所以不可通过value逆推key
let Dict = ["苹果":"apple","桃子":"peach","菠萝":"pineapple"]
//以下两种声明方法
let emptyDict1: [String : String] = [:]
let emptyDict2: Dictionary< String , String> = [:]
//打印可以看出 取出来的值是optional可选型 因为取出来的value可能是空 而且可能key值也不存在呢
for key in Dict.keys{
//系统不知道这个取出来的optional类型的值是空还是什么 所以会报debug警告防止其值为nil 可见swift是十分anquan
// print("\(key) : \(Dict[key]))")
//可以用下面两种方法消除警告 都是为了防止其值为nil
print("\(key) : \(String(describing: Dict[key])))")
print("\(key) : \(Dict[key] ?? "nothing"))")
}
//字典的安全取值 同样适用于其他optional变量 这里如果取出来的值是nil 那就不会执行{}代码块
if let value = Dict["苹果"]{
print(value)
}
for value in Dict.values{
print(value)
}
let Dict1 = ["苹果":"apple","桃子":"peach","菠萝":"pineapple"]
let Dict2 = ["苹果":"apple","桃子":"peach","菠萝":"pineapple"]
Dict1==Dict2
//注意dictionary是随机存储的 所以打印出来与其开始书写程序不同
for item in Dict {
print(item)
}
//下面是增删查改操作
var user : [NSString:NSString] = ["username":"Daniel" , "BirthDay":"2.11" , "habit":"play guitar"]
//增加
user["Sex"]="male"
//调用update方法如果没有找到该键 会自动增加一个键
user.updateValue("leftHand", forKey: "girlfriend")
let oldgirlfriend = user["girlfriend"]
user.updateValue("rightHand", forKey: "girfriend")
//注意swift2.0 中if-let-where 语句简化成 if-let-, 了
if let newgirlfriend = user["girfriend"], oldgirlfriend != newgirlfriend {
print("Daniel has change a girlfriend")
}
//改
user["habit"]="code"
user.updateValue("play football", forKey: "habit")
//删除
user["habit"]=nil
user
user.removeValue(forKey: "girlfriend")
user
user.removeAll()