Swift基础语法06-- 字典

前言

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

字典.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<Int, String>()

// 当创建过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<Hashable, Value> 参数是一个index,但是我直接将字典的索引放进去,结果报错了,后来
 才知道,swift的字典是无序的,所以不能直接使用索引,还需要一个叫DictionaryIndex类型的变量
 这种删除方式,太TM复杂了, 我反正是不用
 */

var dictionary1: Dictionary<String,Int> = ["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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 01-常量与变量 学习swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔阅读 4,981评论 2 19
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,128评论 3 25
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,615评论 4 59
  • 用了一天的时间给孩子办高考的户籍证明,从接到这个任务的时候就开始了抱怨,我说为什么学校不能帮你们办呢?为什么你们这...
    辛平阅读 232评论 0 2
  • 好像每年过生日都要写一篇回忆,写的今年都不知道写什么了。 第一次吧,礼物在生日之前还没有到。哈哈,今年真的是超级曲...
    hangahang阅读 143评论 0 0