Swift基础语法06-- 字典

前言

字典是一种可以存储多个相同类型的值得容器, 每个值都有唯一关联
的键, 键一般是作为字典中这个值得标识符,在swift中,字典中的数据并没有顺序.

Swift基础语法06-- 字典_第1张图片
字典.png
与OC中字典的区别

首相对比一下OC和Swift定义字典的格式
OC: NSDictionary *dict = @{"name":"Alex", "age":"18"}
swift: let dict = ["name":"William", "age":"18"]
与OC之间的区别
1, OC中使用的是{},而swift使用的是[]
2, OC中{}前面必须有@符号, 但是swift中[]前面没有任何符号
3, OC在定义的时候就会指定类型, 但是在swift中只能使用let/var来指定该字典为不可变/可变
4, [String : NSObject]类型是开发中最常使用的]

  • 注意点 : swift中的Dictionary 和Foundation中的NSDictionary是可以相互桥接的

  • 创建空字典

// 都是指定类型了
// 方式一
var emptyDict = [Int: String]()

// 方式二
let dict2 = Dictionary()

// 当创建过emptyDict后,再用[:]又成为一个空字典
emptyDict = [:]
  • 字典的定义
// 这里就直接使用了开发中最长将的定义方式

// 方式一:
// 字典的定义
var dict = ["name":"Alex", "age":18, "height":187, "score":100]
dict

// 方式二:
// 手动指明字典的数据类型
var dict4: [String: String] = ["name":"Alex", "age":"18"]

  • 遍历字典
// 方式1 : 常规的遍历方式,直接遍历出key值或者value值
for Key in  dict.keys {
print("\(Key): \(dict[Key])")
}
for value in dict.values {
print("\(value)")
}

// 方式2
/*
 遍历的第二种方式,可以利用元祖类型来遍历数组, 系统会将key值赋值给元祖中的第一个变量,value值会赋值给元祖中的第二个变量
 也就是说元祖(A,B),其中A表示key, B表示Value
 */
for (key, value) in dict {
    print(key)
    print(value)
}

  • 增加数据
/*
 需要注意一点: 如果字典中没有的key,那么就表示是新增, 如果字典中有这个key,那么就表示的是修改
 male(男性)/female(女性)
 */

dict["gender"] = "male"
dict

  • 删除数据
/*
index: DictionaryIndex 参数是一个index,但是我直接将字典的索引放进去,结果报错了,后来
 才知道,swift的字典是无序的,所以不能直接使用索引,还需要一个叫DictionaryIndex类型的变量
 这种删除方式,太TM复杂了, 我反正是不用
 */

var dictionary1: Dictionary = ["key1": 1]
dictionary1.removeAtIndex(dictionary1.indexForKey("key1")!)
print("dictionary1 = \(dictionary1)")

var dict1 = ["age": 18]
dict1.removeAtIndex(dict1.indexForKey("age")!)
print("dict1\(dict1)")


// 删除字典中key值为name的键值对
dict.removeValueForKey("name")
dict

// 全部删除
dict.removeAll()
dict

  • 修改数据
// 修改(直接通过字典中的key(也就是说字典中有这个key),赋其新值)
dict["name"] = "William"
dict

  • 查(也就是取值)
// 取值(和OC一样是通过Key获取Value)
dict["name"]
  • 判断字典是否为空
// 判断字典是否为空
// 方式一:
if dict.count == 0 {
print("dict is en empty dicyionary")
} else
{
print("dict is not en empty dicyionary")
}

// 方式二:
if dict.isEmpty {
    print("dict is en empty dicyionary")
} else
{
    print("dict is not en empty dicyionary")
}

- 合并

```objc
// 合并
var dict5 = ["title": "boss"]

for (w,g) in dict5 {
dict.updateValue(w, forKey: g)
}

print(dict)


// 方式二 :
var dict3 = ["name": "erer", "age": 18]
var dict4 = ["score": 99.9]
for (key, value) in dict4 { 
dict3[key] = value 
//dict3 的类型是var dic: [String : NSObject]
}
dict3

注意点: 不管是字典还是数值甚至是集合,他们都是类型安全的,也就是说,它们如果需要合并的话,首先需要确保两个集合(包括字典和数组)的类型是一样的, 如果类型不一样,就会报错.

想要了解更多可以去看"标哥的博客"

http://www.henishuo.com/collection-types-of-swift/

你可能感兴趣的:(Swift基础语法06-- 字典)