Swift学习 三

Swift 提供两种集合类型来存储集合,数组和字典。数组是一个同类型的序列化列表集合。字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合。在Swift中,数组和字典的键和值都必须明确它的类型。这意味这数组和字典不会插入一个错误的类型的值,以致于出错。这也意味着当你在数组和字典中取回数值的时候能够确定它的类型。Swift
使用确定的集合类型可以保证代码工作是不会出错,和让你在开发阶段就能更早的捕获错误。

1、数组

Swift数组是储存确定的值,这个Objective-C中的NSArray和NSMutableArray类是有区别的。因为它们是储存各种的对象,而且并不提供返回任何有关对象的具体信息。在Swift中,无论是确定的声明,还是隐式的声明,数组是非常确定它自身是储存什么样的类型,而且,它并不一定要求储存的是类对象。所以Swift数组是类型安全的,因为它一直都确定它自身所能包含的值。

[objc] view
plain
 copy

  1. //初始化数组
  2. let array1:String[]=["a","b"];
  3. //数组是被定义为一个变量(使用var 标识符)而不是常量(使用let 标识符)
  4. var array2:String[]=["aa","bb"];
  5. //初始化一个空数组
  6. var array3=String[]();
  7. //Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。你可以通过这个初始化方法增加一个新的数组,元素的数量成为count,合适的默认值为repeatedValue
  8. var array4=Int[](count:3,repeatedValue:0);
  9. //array2可变数组,可以添加元素
  10. array2.append("cc");
  11. //还可以通过+=操作符添加元素
  12. // array2+="cc";
  13. println(array2);
  14. /*
  15. *打印结果
  16. *[aa, bb, cc]
  17. */
  18. //通过下标法的索引取值
  19. var yuansu1=array2[0];
  20. println(yuansu1);
  21. /*
  22. *打印结果
  23. *aa
  24. */
  25. //还可以修改一个范围内的值
  26. array2[1...2]=["ee","ff"];
  27. println(array2);
  28. /*
  29. *打印结果
  30. *[aa, ee, ff]
  31. */
  32. //在数组某个位置插入元素
  33. array2.insert("oo",atIndex:0);
  34. println(array2);
  35. /*
  36. *打印结果
  37. *[oo,aa, ee, ff]
  38. */
  39. //删除某个位置上的元素
  40. array2.removeAtIndex(0);
  41. println(array2);
  42. /*
  43. *打印结果
  44. *[aa, ee, ff]
  45. */
  46. //移除数组最后一个元素
  47. var lastyuansu=array2.removeLast();
  48. //遍历数组
  49. for item in array2
  50. {
  51. println(item);
  52. }

2、字典

Swift字典时储存一个类型的具体的键和值,和Objective-C的NSDictionary 和NSMutableDictionary由一定的区别,因为它们是使用各种的对象来作为它们的键和值,而且并不提供任何有关对象的具体信息。在Swift中,对于一个特定的字典,它所能储存的键和值都是确定的,无论是明确声明的类型还是隐式推断的类型。Swift的字典写法是Dictionary<KeyType,ValueType>,KeyType是你想要储存的键,ValueType是你想要储存的值。唯一的限制就是KeyType必须是可哈希的(hashable)——就是提供一个形式让它们自身是独立识别的。Swift的所有基础类型(例如字符串(String),整形(Int),双精度(Double)和布尔(Bool))在默认是可哈希的(hashable),和这些类型都常常用语当作字典的键。枚举成员值不需要协助值(associated
values)(具体描述在 Enumerations)也是因为它们默认也是可哈希的(hashable)。

[objc] view
plain
 copy

  1. //初始化一个字典
  2. let dict1:Dictionary<String,String>=["Name":"yu","Age":"26"];
  3. //和数组一样,如果你初始化一个字典的时候使用相同的类型,你可以不指明字典的类型。
  4. var dict2:Dictionary<String,String>=["Name2":"yu","Age2":"26"];
  5. //创建一个空字典
  6. var dict3=Dictionary<String,String>();
  7. //下标法,当没有这个key的时候,是新增一个元素
  8. dict2["Sex"]="nan";
  9. /*
  10. *打印结果
  11. *[Name2: yu, Age2: 26, Sex: nan]
  12. */
  13. //修改
  14. dict2["Sex"]="n";
  15. println(dict2);
  16. /*
  17. *打印结果
  18. *[Name2: yu, Age2: 26, Sex: n]
  19. */
  20. //同样, 使用字典的updateValue(forKey:) 方法去设置或者更新一个特定键的值 . 和上面的下标例子一样, updateValue(forKey:) 方法如果键不存在则会设置它的值,如果键存在则会更新它的值, 和下标不一样是, updateValue(forKey:) 方法 如果更新时,会返回原来旧的值rThis enables you to 可以使用这个来判断是否发生了更新。
  21. if let oldValue = dict2.updateValue("wang", forKey: "Name2")
  22. {
  23. println(dict2);
  24. }
  25. /*
  26. *打印结果
  27. *[Name2: wang, Age2: 26, Sex: n]
  28. */
  29. //通过下标法取值
  30. if let value = dict2["Age2"]
  31. {
  32. println(value);
  33. } else
  34. {
  35. println("no exsit")
  36. }
  37. //你可以使用下标语法把他的值分配为nil,来移除这个键值对
  38. dict2["Sex"]=nil;
  39. println(dict2);
  40. /*
  41. *打印结果
  42. *[Name2: yu, Age2: 26]
  43. */
  44. //同样,从一个字典中移除一个键值对可以使用removeValueForKey方法,这个方法如果存在键所对应的值,则移除一个键值对,并返回被移除的值,否则返回nil。
  45. if let removedValue = dict2.removeValueForKey("Age2")
  46. {
  47. println(dict2);
  48. } else
  49. {
  50. println(dict2);
  51. }
  52. //遍历字典
  53. for(key,value) in dict2
  54. {
  55. println("\(key):\(value)");
  56. }
时间: 2024-08-13 11:14:30

Swift学习 三的相关文章

swift学习三:?和!理解

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化.如果在使用变量之前不进行初始化就会报错: 1 2 3 4 5 var stringValue : String   //error: variable 'stringValue' used before being initialized //let hashValue = stringValue.hashValue //            

Swift学习三

http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集合.字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合.在Swift中,数组和字典的键和值都必须明确它的类型.这意味这数组和字典不会插入一个错误的类型的值,以致于出错.这也意味着当你在数组和字典中取回数值的时候能够确定它的类型.Swift 使用确定的集合类型可以保证代码工作是不会出错,和让

swift学习笔记(三)关于拷贝和引用

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型. 闭包和函数同属引用类型 捕获则为拷贝.捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值 class属于引用类型. Array的情况稍微复杂一些,下面主要对集合类型进行分析: 一.关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会

Swift学习笔记(三):Protocols and Delegates

一.协议 | Protocols 协议用于定义完成某些功能所需要的方法和属性,协议本身并不提供这些功能的具体实现,只是用来描述这些实现.类.结构体.枚举通过提供协议所要求的方法.属性的具体实现来采用协议.能够满足协议要求的类型称之为协议的遵循者. 协议可以要求遵循者提供特定的实例属性.实例方法.类方法.操作符或下标脚本等. //创建一个协议,协议说声明了一个方法Speak protocol Speaker { func Speak() } //类Vicki遵循Speaker协议,在类中具体实现了

Swift学习——Swift基础详解(三)

小葵花课堂继续开讲 Numeric Literals    数字文本 数字文本有以下几种写法: A decimal number, with no prefix A binary number, with a 0b prefix An octal number, with a 0o prefix A hexadecimal number, with a 0x prefix 十进制数,无前缀:二进制数,0b前缀:八进制数,0o前缀:十六进制数,0x前缀 论数字17的N种表现形式: let deci

Swift学习——使用if和switch来进行条件操作,使用for,while,和do-while来进行循环(三)

Swift学习--使用if和switch来进行条件操作,使用for,while,和do-while来进行循环 //switch支持随意类型的数据以及各种比較操作--不不过整数以及測试相等 //注意假设去掉default程序会报错 let strings = "hello3" switch strings{ case "hello1": let stringsComment = "say hello1" println("stringsC

Swift 学习-多线程

1:第一种多线程 func fun1(){ for i in 200...300{ NSLog("%d",i); } } func fun2(){ for i in 300...400{ NSLog("%d",i); } } var th1 = NSThread(target:self,selector:"fun1",object:nil); th1.start(); //开启线程 NSThread.detachNewThreadSelector

汇集了很多swift 学习指南

https://github.com/ipader/SwiftGuide 1,059   Unstar7,294 Fork1,966 ipader/SwiftGuide CodeIssues 0Pull requests 0WikiPulseGraphs 这份指南汇集了Swift语言主流学习资源,并以开发者的视角整理编排.http://dev.swiftguide.cn 376 commits 3 branches 0 releases 12 contributors Swift 100.0%

Swift学习笔记(一):基础

一.常量 & 变量 //常量 let constantsTeam = 1 //变量 var variablesTeam = 2 尽可能使用常量,这样更清晰并且内存更不容易肾亏. 二.显示/隐式指定类型 //隐式 let inferredTeam = 3 //显式 let explicitTeam:Int = 4 三.字符串输出 //通过\(变量或常量名)来引用组合字符串 println("\(inferredTeam) is bigger than \(variablesTeam)!&q