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

1、数组

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


//初始化数组
        let array1:String[]=["a","b"];
        
        //数组是被定义为一个变量(使用var 标识符)而不是常量(使用let 标识符)
        var array2:String[]=["aa","bb"];
        
        //初始化一个空数组
        var array3=String[]();
        
        //Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。你可以通过这个初始化方法增加一个新的数组,元素的数量成为count,合适的默认值为repeatedValue
        var array4=Int[](count:3,repeatedValue:0);
        
        //array2可变数组,可以添加元素
        array2.append("cc");
        //还可以通过+=操作符添加元素
        // array2+="cc";
        
        println(array2);

        /*
        *打印结果
        *[aa, bb, cc]
        */
        
        //通过下标法的索引取值
        var yuansu1=array2[0];
        
        println(yuansu1);
        /*
        *打印结果
        *aa
        */
        
        //还可以修改一个范围内的值
        array2[1...2]=["ee","ff"];
        println(array2);
        /*
        *打印结果
        *[aa, ee, ff]
        */
        
        //在数组某个位置插入元素
        array2.insert("oo",atIndex:0);
        println(array2);
        /*
        *打印结果
        *[oo,aa, ee, ff]
        */
        
        //删除某个位置上的元素
        array2.removeAtIndex(0);
        println(array2);
        /*
        *打印结果
        *[aa, ee, ff]
        */

        //移除数组最后一个元素
        var lastyuansu=array2.removeLast();
        
        //遍历数组
        for item in array2
        {
        
        
            println(item);
            
        
        }

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)。

//初始化一个字典
        let dict1:Dictionary<String,String>=["Name":"yu","Age":"26"];
        //和数组一样,如果你初始化一个字典的时候使用相同的类型,你可以不指明字典的类型。
        var dict2:Dictionary<String,String>=["Name2":"yu","Age2":"26"];
        //创建一个空字典
        var dict3=Dictionary<String,String>();
        //下标法,当没有这个key的时候,是新增一个元素
        dict2["Sex"]="nan";
        /*
        *打印结果
        *[Name2: yu, Age2: 26, Sex: nan]
        */
        //修改
        dict2["Sex"]="n";
        
        println(dict2);
        /*
        *打印结果
        *[Name2: yu, Age2: 26, Sex: n]
        */
        
        //同样, 使用字典的updateValue(forKey:) 方法去设置或者更新一个特定键的值 . 和上面的下标例子一样, updateValue(forKey:) 方法如果键不存在则会设置它的值,如果键存在则会更新它的值, 和下标不一样是, updateValue(forKey:) 方法 如果更新时,会返回原来旧的值rThis enables you to 可以使用这个来判断是否发生了更新。
        if let oldValue = dict2.updateValue("wang", forKey: "Name2")
        {
        
        
            println(dict2);
            
        }
        /*
        *打印结果
        *[Name2: wang, Age2: 26, Sex: n]
        */
        
        //通过下标法取值
        if let value = dict2["Age2"]
        {
            println(value);
            
        } else
        {
            println("no exsit")
        }
        
        //你可以使用下标语法把他的值分配为nil,来移除这个键值对
        dict2["Sex"]=nil;
        println(dict2);
        /*
        *打印结果
        *[Name2: yu, Age2: 26]
        */

        //同样,从一个字典中移除一个键值对可以使用removeValueForKey方法,这个方法如果存在键所对应的值,则移除一个键值对,并返回被移除的值,否则返回nil。
        if let removedValue = dict2.removeValueForKey("Age2")
        {
           println(dict2);
            
        } else
        {
            println(dict2);
        }
        
        //遍历字典
        for(key,value) in dict2
        {
        
            println("\(key):\(value)");
            
        
        }