美文网首页
Swift(十)字典

Swift(十)字典

作者: 冰三尺 | 来源:发表于2016-10-30 16:02 被阅读138次
    拾穗者

    airports 字典被定义为 Dictionary<String, String> ,这意味着这个字典的键和值都是 String 类型。
    创建一个空字典

    //这个例子创建了一个 Int - String 类型的空字典来储存英语对应的整数。它的键是 Int 型,值是 String 型。
    var namesOfIntegers = Dictionary<Int, String>()
    

    注意:airports字典被声明为变量(用var关键字)而不是常量(let关键字)因为后来更多的机场信息会被添加到这个字典中。

    var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"]
    

    和数组一样,构造字典就也可以不用把类型定义清楚(Swift 的类型推断)。airports 也可以用这种简短方法定义:

    var airports1 = ["TYO": "Tokyo", "DUB": "Dublin"]
    

    这个语句中所有的键和值都分别是相同的数据类型,Swift 可以推断出 airports 的字典类型是 Dictionary<String, String>。


    修改值

    //如果可以存在, 则进行替换value. 如果key不存在则进项添加键值对
    airports["LHR"] = "London"

    //如果key存在则进行更新, 返回key对应的value值
    let vault = airports.updateValue("12121", forKey: "DUB")
    //如果key不存在则进行添加. 返回nil
    let vault1 = airports.updateValue("12121", forKey: "DUB")
    //推荐使用airports.updateValue, 可以进行判断是否为nil
    

    删除值

    通过使用下标语法给某个键对应的值赋值为 nil ,来从字典里移除一个键值对。

    airports["APL"] = "Apple International"
    // "Apple International" is not the real airport for APL, so delete it
    airports["APL"] = nil
    // APL has now been removed from the dictionary
    

    另外,removeValueForKey 方法也可以用来从字典中移除键值对。如果键值对存在,移除该键值对并且返回被移除的 value;否则返回 nil:

    if let removedValue = airports.removeValue(forKey: "DUB")
    {
        println("The removed airport's name is \(removedValue).")
    } else {
        println("The airports dictionary does not contain a value for DUB.")
    }
    // prints "The removed airport's name is Dublin International."
    

    LazyMapCollection

    和OC不同的是, airports.keys和airports.keys返回的不是数组, 而是LazyMapCollection, 如果想像OC那样获取一个数组
    使用let airportCodes = Array(airports.keys)转成数组
    具体LazyMapCollection的使用,请查阅官方文档, 此篇文章不做过多解释, 会在后续的文章中说明


    数组和字典都是在集合中存储值。如果创建一个数组或者字典时把它分配给一个变量,那么它们是可变的。这意味着在创建后可以通过添加、移除元素来改变这个集合。相反,如果把数组或字典分配给常量,那么它们就不能被改变。

    对字典来说,不可变性也意味着不能替换其中任何现有键所对应的值。不可变字典在被首次设置以后就不能更改。 不可变性对数组来说有一点不同,当然我们不能试图改变不可变数组的大小,但是可以重新设值索引对应的值。这使得 Swift 数组在大小被设定以后依然可以灵活使用。

    Swift 数组的可变性影响了数组实例的分配和修改,想获取更多信息,请参见集合在赋值和复制中的行为。

    注意:在数组大小不需要改变的时候,创建不可变数组是个很好的习惯。Swift 编译器会优化这样的集合。

    定义一个字典

    //定义字典时没有赋值, 需要指定类型
    var contact = Dictionary<String,Any>()
    contact["title"] = "123"
    
    //对于上面的定义方法, 还可以这样写
    var contact1 = [String : Any]()
    contact1["abc"] = "kop"
    contact1
    
    var airports: Dictionary<String, String> = [:]
    airports["key"] = "qianqian"
    
    //对于上面的定义方法, 还可以这样写
    var airports1:[String : Any] = [:]
    airports1["key"] = "qianqian"
    airports1
    
    //定义字典时给字典赋初始值, 不需要再次指定字典的类型, 会进行自动推断
    var airports1 = ["TYO": "Tokyo", "DUB": "Dublin"]
    

    定义一个可选字典

    var data[String:Int]?
    

    相关文章

      网友评论

          本文标题:Swift(十)字典

          本文链接:https://www.haomeiwen.com/subject/nuhuuttx.html