• /* Swift 提供了两种集合类型,即数组(Array)和字典(Dictionary),存储值的集合 数组存储相同类型的顺序列表值。字典存储无序同类型值的集合,通过键来查询和 引用。 在Swift中,数组和字典总是值和键的存储类型是...
    /* Swift 提供了两种集合类型,即数组(Array)和字典(Dictionary),存储值的集合
       数组存储相同类型的顺序列表值。字典存储无序同类型值的集合,通过键来查询和
       引用。
       在Swift中,数组和字典总是值和键的存储类型是明确的。这意味着不能插入错误的类型到字典
       和数组中。这种显示类型可以保证你的代码中值的类型总是明确的。   
    */
    // 数组类型全型为Array<SomeType>,也可以使用SomeType[]这种写法。虽然这两种类型是一样的,但
    // 后者更佳,并且都会使用后者。
    var shoppingList: String[] = ["Egg", "Milk"]
    
    // 访问和修改数组元素
    println("The shopping list contains \(shoppingList.cout) items")
    
    // 判断数组是否是空数组
    if shoppingList.isEmpty {
      println("Empty array")
    } else {
      println("Non empty array")
    }
    
    // 追加元素 可以使用append方法 ,可以使用+=
    shoppingList.append("Flour") // 变成:["Egg", "Milk", "Flour"]
    shoppingList += "Baking Power" // 变成:["Egg", "Milk", "Flour", "Baking Power"]
    
    // 通过下标访问元素
    var firstItem = shoppingList[0] // Egg
    // 通过下标修改元素
    shoppingList[0] = "Six eggs" // 把Egg变成了Six eggs
    // 通过范围下标修改
    shoppingList[1..3] = ["Egg", "Eggg"] // ["Egg", "Eggg", "Flour", "Baking Power"]
    shoppingList[1...3] = ["Egg", "Eggg", "Egggg"] // ["Egg", "Eggg", "Egggg", "Baking Power"]
    
    // 通过insert方法在指定下标插入元素
    //变成:["InsertedValue", "Egg", "Eggg", "Egggg", "Baking Power"]
    shoppingList.insert("InsertedValue", atIndex: 0) 
    
    // 通过removeAtIndex移除某个元素
    // 执行后,变成: ["Egg", "Eggg", "Egggg", "Baking Power"]
    let removedObj = shoppingList.removeAtIndex(0) 
    
    // 移除最后一个元素
    // 方式一:
    var lastObj = shoppingList.removeLast() 
    // 方式二:
    var lastObj = shoppingList.removeAtIndex(shoppingList.cout - 1)
    
    // 循环迭代数组
    for item in shoppingList {
      println(item)
    }
    
    // 使用了全局函数enumerate
    for (index, value) in enumerate(shoppingList) {
        println("Item at index \(index + 1) is \(value)")
    }
    
    // 创建和初始化数组
    var shomInts = Int[]() // 创建空数组,元素的个数为0
    // 调用初始化器
    var threeDoubles = Double[](cout: 3, repeatedValue: 0.0)
    // 通过类型自动推测,不用指定特定类型
    var anotherThreeDoubles = Array(cout: 3, repeatedValue: 2.4)
    // 两个数组相加,新数组的类型会根据这两个数组的类型推断出来
    var sixDoubles = threeDoubles + anotherThreeDoubles
    
    
    
    
    
    /* 字典
       字典是存储多个相同类型值的容器。每个值都有一个与之关联的唯一键作为该值在该字典中的唯一标识。
       字典中的元素是无序的,与数组不同。当我们需要基于标识来查询值时,我们会使用字典。Swift中的字典
       中的键和值的类型必须是明确的,类型为:Dictionary<KeyType, ValueType>,其中KeyType就是键的类型,
       而ValueType就是值的类型。对字典的键的唯一限制是这个KeyType必须是可哈希的类型。Swift中的所有基本
       数据类型都是可哈希的,这些基本类型都可以作为字典的值。
    */
    // 创建空字典
    var emptyDict = Dictionary<String, String>()
    // 初始化
    var airports: Dictionary<String, String> = ["T": "Tokyo", "D": "Doubin"]
    // 如果初始化,可以不明确指明类型,可以自动根据初始值推测出来
    var ariports = ["T": "Tokyo", "D": "Doubin"]
    
    // 访问和修改字典元素
    println("The dictionary of airports contains \(airports.cout) items")
    // 添加新键值对
    ariports["L"] = "London"
    // 通过已经存在的键,修改对应的值
    airports["L"] = "London Heathrow"
    // 可以通过updateValue(forKey:)添加或者修改元素
    if let oldValue = airports.updateValue("Dubin Internation", forKey:"D") {
       println("The old value for D was \(oldValue)")
    }
    
    // 通过下标键获取对应的值,返回的是一个Optional类型值,通过optional binding拆包
    if let airportName = airports["D"] {
       println("The name of the airport is \(airportName)")
    } else {
       println("That airport is not in the airports dictionary")
    }
    
    // 通过下标键移除键值对,只需要设置为nil
    airports["A"] = "Apple International"
    airport["A"] = nil // 移除
    
    // 可以通过removeValueForKey移除
    if let removeValue = airports.removeValueForKey("D") {
       println("The remove airport's name is \(removeValue)")
    } else {
       println("The airports dictionary does not contain a value for D")
    }
    
    // 通过键值对迭代字典
    for (key, airportName) in airports {
      println("\(key): \(airportName)")
    }
    
    for key in airports.keys {
      println("Airport code: \(key)")
    }
    
    for airportName in airports.values {
       println("Airport name: \(airportName)")
    }
    
    // 把字典所有的值或者键存储到数组中
    let airportCodes = Array(airports.keys)
    let airportNames = Array(airport.values) 
    
    // 创建空字典
    var namesOfIntegers = Dictionary<Int, String>()
    namesOfIntegers[10] = "ten" // 有一个键值对
    namesOfIntegers = [:] // 又变成空字典了,由于前面已经指定过类型了,这里可以重复不指定
    

    展开全文
  • - (void)viewDidLoad {  [super viewDidLoad]; ... //统计数组相同元素的个数    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];    //需要统计的数
  • 对数组中所有的值求和 2020-06-08 17:48:00
    在写购物车是用到了数组中多个值的求和 本来是用循环去写的但是发现太麻烦了 后来发现了数组中的reduce方法 下面展示一些 内联代码片。 // An highlighted block var numbers = [3, 5, 7, 66, 11]; var sum = ...
  • swift之判断类型的方法 2018-02-01 10:43:29
    ========Objective-C 的运行时,来获取类并按照原来的方式转换: object_getClass 是一个定义在 ObjectiveC 的 runtime 中的方法,它可以接受任意的 AnyObject! 并返回它的类型 AnyClass! (注意这里的...
  • Swift3.0从入门到放弃(二) 2017-02-25 09:39:58
    Swift3.0数组、字典、元组、可选类型的使用
  • 1 // 2 3 // ViewController.swift ... 4 5 // Swift-Array 6 7 // 8 9 // Created by luorende on 16/9/12. 10 11 // Copyright © 2016年 luorende. All rights reserved. 1...
  • Swift Copy-On-Write 写时复制 2018-04-04 18:00:41
    Swift中,所有的基本类型,包括整数、浮点数、字符串、数组和字典等都是值类型,并且都以结构体的形式实现。那么,我们在写代码时,这些值类型每次赋值传递都是会重新在内存里拷贝一份吗? 答案是否定的,想象...
  • 本文转载自SwiftGG, 原文地址: [使用 Realm 和 Swift 创建 ToDo 应用](http://swift.gg/2015/12/08/building-a-todo-app-using-realm-and-swift/). 同时加上了个别的补充.
  • Swift 4.0 学习笔记
  • Swift 容器类型总结 2016-07-01 09:19:45
    Swift提供了三种主要的容器类型:数组(Array)、集合(Set)和字典(Dictionary)。数组存储相同类型的元素,集合存储有序不重复的值,字典采用键值对来存储元素。
  • Swift 4之更新 2019-06-11 14:26:46
    相比较Swift 3时的更新,此次Swift 4的变化要小得多,甚至还以新颖和改进的形式重塑了一些旧的功能。更让我们高兴的是,我们不需要把项目立即就更新到Swift 4.0! 集成到Xcode 9中的Swift 4编译器有一个“Swift 3.2...
  • Swift 集合类型 2020-03-01 17:33:10
    Swift语言中一共提供了3种集合类型:Array(数组)、Set(集合)和Dictionary(字典)。Array类型是一种有序集合,放入其中的数据都有一个编号,且编号从0开始依次递增。通过编号,开发者可以找到Array数组中对应...
  • 目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类型进行判断,还要进行强转...
  • Swift4.0 语法新特性 2018-03-02 17:38:32
    改进key-value coding的keypath4.修改并强化字典功能5.字符串变为集合类型1.Swifty encoding and decoding:在Objective-C中值类型的相互影响是十分糟糕的。比如NSCoding协议,类继承它之后,我们需要在类中重写...
  • swift4.0 新特性 2017-08-21 11:09:18
    #4.修改并强化字典功能 #5.字符串变为集合类型 1.Swifty encoding and decoding: 在Objective-C中值类型的相互影响是十分糟糕的。比如NSCoding协议,类继承它之后,我们需要在类中重写自定义的 e
  • Swift中实现撤销功能 2019-05-19 01:16:46
    本文讲的是在Swift中实现撤销功能, 在过去的一段时间里,有很多的Blog推出了关于他们想在Swift中所添加的动态特性的文章。事实上Swift 已经成为了一门具有相当多动态特性的语言:它拥有泛型,协议, 头等函数...
  • Moya 在Swift开发中起着重要的网络交互作用,但是还有不如之处,比如网络不可用时,返回的 Response 为 nil,这时还得去解析相应的 Error Codable 可以帮助我们快速的解析数据,但是一旦声明的属性类型与json中的不...
1 2 3 4 5
收藏数 91
精华内容 36