Swift字典类

news/2024/7/20 20:16:03 标签: Swift视频, swift, Swift教程, iOS8, ios
在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典。
一、NSDictionary类

NSDictionary有很多方法和属性,下面总结其常用的方法和属性。

initWithDictionary: 构造器,通过Swift的Dictionary创建NSDictionary对象。

initWithObjects:forKeys: 构造器,通过键集合和值集合创建NSDictionary对象。
count 字典集合的长度。
objectForKey: 通过键获得值对象。
allKeys: 返回所有键集合。
下面看NSDictionary数组的示例代码:
import Foundation


let keyString : NSString = "one two three four five"	①
var keys : NSArray = keyString.componentsSeparatedByString(" ")	②


let valuestring : NSString = "alpha bravo charlie delta echo"	③
var values : NSArray = valuestring.componentsSeparatedByString(" ")	④


vardict : NSDictionary = NSDictionary(objects: keys, forKeys:values)	⑤


NSLog("%@", dict.description)	⑥


varvalue:NSString = dict.objectForKey("three") as NSString	⑦
NSLog("three = %@", value)


varkys = dict.allKeys		⑧
for item : AnyObject in kys {	⑨
var key = item as NSString
NSLog("%@ - %@", key, dict.objectForKey(key) as NSString)
}


上述代码第①行和第③行代码是NSString字符串,字符串由单词和空格组成。第②行和第④行代码使用空格分割字符串,返回类型是NSArray数组。
第⑤行代码实例化NSDictionary对象,objects参数是值数组values,forKeys参数是。第⑥行代码description属性是获得字典的内容。第⑦行代码是通过objectForKey方法读取键对应的值,并且转换为NSString类型。
第⑧行代码dict.allKeys是获得所有的键集合kys,第⑨行代码是遍历键集合kys。
输出结果如下:
2014-07-06 20:19:07.274 PlaygroundStub_OSX[4110:303] {
five = echo;
four = delta;
one = alpha;
three = charlie;
two = bravo;
}
2014-07-06 20:19:07.281 PlaygroundStub_OSX[4110:303] three = charlie
2014-07-06 20:19:07.296 PlaygroundStub_OSX[4110:303] one - alpha
2014-07-06 20:19:07.300 PlaygroundStub_OSX[4110:303] five - echo
2014-07-06 20:19:07.305 PlaygroundStub_OSX[4110:303] three - charlie
2014-07-06 20:19:07.308 PlaygroundStub_OSX[4110:303] two - bravo
2014-07-06 20:19:07.313 PlaygroundStub_OSX[4110:303] four - delta


二、NSMutableDictionary类
NSMutableDictionary是NSDictionary的子类,它有很多方法和属性,下面总结其常用的方法和属性。
-setObject:forKey: 通过键和值。
-removeObjectForKey: 按照键移除值。
下面看NSDictionary数组的示例代码:
import Foundation


var mutable : NSMutableDictionary = NSMutableDictionary()	①
// add objects
mutable.setObject("Tom", forKey: "tom@jones.com")	②
mutable.setObject("Bob", forKey: "bob@dole.com")


NSLog("%@", mutable.description)


var keys = mutable.allKeys
for item : AnyObject in keys {
var key = item as NSString
NSLog("%@ - %@", key, mutable.objectForKey(key) as NSString)
}


上述代码第①行是实例化NSMutableDictionary,第②行代码是通过setObject方法添加键和值。
输出结果如下:
2014-07-06 20:42:11.596 PlaygroundStub_OSX[4332:303] {
    "bob@dole.com" = Bob;
    "tom@jones.com" = Tom;
}
2014-07-06 20:42:11.605 PlaygroundStub_OSX[4332:303] bob@dole.com - Bob
2014-07-06 20:42:11.608 PlaygroundStub_OSX[4332:303] tom@jones.com – Tom


三、NSDictionary与Dictionary之间的关系
NSDictionary与Dictionary之间的关系如同NSArray与Array之间的关系,Swift在底层能够将它们自动地桥接起来,一个NSDictionary对象桥接之后的结果是[NSObject : AnyObject]字典(值为NSObject 类型,键为AnyObject 类型的Dictionary字典)。
下面我们看一个使用Dictionary和NSDictionary的示例:
import Foundation				①


let keyString : NSString = "one two three four five"
let keys : NSArray = keyString.componentsSeparatedByString(" ")


let valueString : NSString = "alpha bravo charlie delta echo"
let values : NSArray = valueString.componentsSeparatedByString(" ")


let foundationDict : NSDictionary = NSDictionary(objects:values, forKeys:keys)	②


let swiftDict : Dictionary = foundationDict	③
println(swiftDict.description) 


let value: AnyObject? = swiftDict["three"]	④
println("three = \(value)") 


for (key, value) in swiftDict {	⑤
    println ("\(key) - \(value)")
}


代码第①行是引入Foundation。第②行代码声明并初始化NSDictionary字典,第③行代码是将NSDictionary字典赋值给Dictionary字典,这个过程也发生了类型转换,不仅是NSDictionary到Dictionary的转换,而且它们的内部元素也发生了转换。

第④行代码是从Dictionary字典取three键对应的值,它的类型是可选的AnyObject类型,这是因为有可能取不到这个值。第⑤行代码是遍历Dictionary字典键和值集合。



更多内容请关注国内第一本Swift图书 《Swift开发指南》
本书交流讨论网站: http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台



http://www.niftyadmin.cn/n/1036737.html

相关文章

Swift中的循环语句

循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型:while、do while、for和for in。for和while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行&…

4.java数组

数组的作用 就是一个容器,用于在程序中存储一批同种类型的数据 数组的定义 静态初始化数组 格式1 数据类型[] 数组名称new 数据类型 new 数据类型[]{元素1,元素2,元素3........} 格式2 数据…

Part 1:基础语言-Cocos2d-x手机游戏开发之C++语言基础-关东升-专题视频课程

Part 1:基础语言-Cocos2d-x手机游戏开发之C语言基础—60642人已学习 课程介绍 本套Cocos2d-x视频教程采用的编程语言为C语言,本教程为专门针对想学习Cocos游戏开发,而没有语言基础的同学而制作的一门C基础课程。课程收益讲师介绍关东升 更…

E. Split Into Two Sets

题目: 题目大意:给定n个由两个数字构成的集合(这些数字都不会超过n) ,要求你把这些集合分成两份,且单份中不能出现相同的数字存在。 题目地址:Problem - E - Codeforces 解题思路: …

Part 2:Cocos2d-x开发基础-Cocos简介与环境搭建-关东升-专题视频课程

立即学习:https://edu.csdn.net/course/play/6735/133126 是独立按键还是矩阵按键

F - Pre-order and In-order(Atcoder 255)

题目: 题目链接: F - Pre-order and In-order (atcoder.jp) 题解:Editorial - Aising Programming Contest 2022(AtCoder Beginner Contest 255) 思路: 因为官方题解已经说的很清楚了 我这里就简要补充一些 1.首先…

Part 3:Cocos2d-x开发基础-第一个Cocos程序-关东升-专题视频课程

立即学习:https://edu.csdn.net/course/play/24797/282165 第一种创建字典的方法,使用的是花括号 第二种创建字典的方法,使用的是圆括号 (每个key只能对应一个值) 第三者创建的方法用等于连接(关键字参数&#xff0…

java Properties与IO流相结合的方法

Properties与IO流结合的方法主要是一下几种 我们先编写代码如下 import java.io.FileWriter; import java.io.IOException; import java.util.Properties;public class text {public static void main(String args[]) throws IOException {Properties pro new Properties();…