import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
字典是一种存储同一种类型多条数据的存储器,以 key(键) - value(值)的形式存在
每个独立的 key 关联一个 value ,键作为字典中的值的标识符
和数组不同,字典是无序的,通过键访问字典
类似于现实世界中使用字典查字义。
字典在使用时需要明确存储的键和值类型,方法是通过显示的类型声明或者类型推断。
字典声明的语法:Dictionary<KeyType, ValueType> 。
其中 KeyType 是字典中键的数据类型,ValueType是字典中对应于键的值的数据类型。
KeyType 的唯一限制就是必须是哈希的,这样可以保证它是唯一的,
所有的 Swift 基本类型(例如 String,Int, Double 和 Bool)默认都是可哈希的,
所以这些类型都可以在字典中当做键使用。
未关联值的枚举成员默认也是可哈希的
*/
/**
字典字构造中,每一个键值对的键和值都由冒号分割,多个键值对由逗号分割,并用 [] 包含起来:
[ key 1 : value 1 , key 2 : value 2 , key 3 : value 3 ]
fruit字典被声明为变量(用var关键字)而不是常量(let关键字)
因为后来更多的信息会被添加到这个字典中。
和数组一样,构造字典就也可以不用把类型定义清楚(Swift 的类型推断)。
这个语句中所有的键和值都分别是相同的数据类型,
Swift 可以推断出 fruit 的字典类型是 Dictionary<String, String>。
*/
var fruit :Dictionary<String,String> = ["1":"apple","2":"banana"]
let fruit1 :Dictionary<String,String> = ["3":"pich","4":"melon"]
print(fruit)
print(fruit1)
/**
通过字典的方法和属性,或者使用下标语法读取和修改字典。
和数组一样,可以通过字典的只读属性 count 来获取字典中元素的数量
*/
print("fruit has \(fruit.count) items")
/**
使用下标语法来添加新的元素。使用 key 作为下标索引,并且分配新的值
*/
fruit["5"] = "orange"
print(fruit)
/**
使用下标语法来改变 key 对应的值:
*/
fruit["5"] = "tomato"
print(fruit)
/**
字典的 updateValue(forKey:) 方法可以添加或者更新 forKey 对应的值。
如上面的示例,updateValue(forKey:) 方法在 forKey 不存在对应值的时候增加值,存在的时候更新对应已存在的值。
这个方法返回更新值之前的原值。以方便我们检查更新是否成功。
updateValue(forKey:) 方法返回的是包含一个字典值类型的可选值。
举例来说:对于存储 String 值的字典,这个函数会返回一个 String? 或者 “可选 String” 类型的值。
如果值存在,则这个可选值就是被替换的值,否则是nil。
*/
let string1 = fruit.updateValue("melon", forKey: "2")
print("string1 == \(string1)")
print(fruit)
let string2 = fruit.updateValue("sky", forKey: "3")
print(string2)
print(fruit)
/**
使用下标语法访问字典中 key 对应的 value 。
由于 key 对应的 value 可能是不存在的,所以返回的是可选类型,
如果值存在,返回对应的值,否则就返回nil:
*/
let string3 = fruit["10"]
print("string3 == \(string3)")
/**
通过使用下标语法给某个键对应的值赋值为 nil ,来从字典里移除一个键值对。
*/
fruit["other"] = "nicai"
print(fruit)
fruit["other"] = nil
print(fruit)
/**
另外,removeValueForKey 方法也可以用来从字典中移除键值对。
如果键值对存在,移除该键值对并且返回被移除的 value;否则返回 nil
*/
let remove1 = fruit.removeValueForKey("1")
print(fruit)
print(remove1)
let remove2 = fruit.removeValueForKey("10")
print(remove2)
print(fruit)
}
}