美文网首页iOS学习开发IOSiOS Developer
Swift基础学习的总结(二)

Swift基础学习的总结(二)

作者: 疾风小超 | 来源:发表于2016-05-23 16:17 被阅读105次

    今天正在学习刘雨波老师的《玩转Swift2.0(第二季)》,下面来总结一下吧.
    1.可选型
    这是在swift中十分重要的概念.与其他编程语言不同的是,nil并不是适用于任何类型.在swift中,nil是一个单独的类型,要想一个变量可以被赋值nil,需要在类型后加上问号,例如:

    var str: String = "hh"        // 类型为String
    var str1: String? = "hello"   // 类型为String?
    

    还需注意的是,要想使用可选型的变量,需要进行解包,解包一般有以下方式

    • 1.1 if let 解包
    var age: Int? = 17
    if let age = age {
        print(age)
    }
    
    • 1.2 强制解包 !
    var age: Int? = 17
    print(age!)
    ```说明程序员能够保证变量是不会为nil的,但是这种还是会存在隐患.
    
    2.隐式可选型
    即初始化可以暂时赋值为nil,但是用户在使用变量时,一定得保证变量有值,不然会报错
    

    var age: Int! = nil
    age = 17
    print(age)

    隐式可选型一般用于类中
    
    3.Swift中的容器类有:数组、字典、集合
     * 3.1 数组Array(有序的数据集合)
    在swift中,数组类型为Array,通常里面的元素都是同一种类型的,Array的初始化方法如下:
    
    

    var array1 = [0, 1, 2, 3, 4]
    var array11: [Int] = [0, 1, 2, 3, 4]
    var array12: Array<Int> = [0, 1, 2, 3, 4] // 使用范式

    var array2 = ["A", "B", "C", "D", "E"]
    var array21: [String] = ["A", "B", "C", "D", "E"]
    var array22: Array<String> = ["A", "B", "C", "D", "E"]

    // 初始化空的数组
    var emptyArray1: [Int] = []
    var emptyArray2: Array<Int> = []
    var emptyArray3 = Int
    var emptyArray4 = Array<Int>()

    // 可以初始化时,统一赋初值
    var array3 = Array<Int>(count: 3, repeatedValue: -1)

    数组相关的属性、方法
    

    var numberArray: Array<String> = ["A", "B", "C", "D", "E"]
    numberArray.count // 5
    numberArray.isEmpty // false
    numberArray[1] // "B" (注意:数组越界问题)
    numberArray.indexOf("C") // 2
    numberArray.contains("B") // true

    numberArray.first // 数组中第一个元素(可选型,使用是需要解包)
    numberArray.last // 数组中最后一个元素

    numberArray.minElement() // 数组中的最小值(可选型,使用是需要解包)
    numberArray.maxElement() // 数组中的最大值

    numberArray[2..<4] // ["C", "D"] (获取子数组)
    numberArray[2..<numberArray.count] // ["C", "D", "E"]

    /**

    • 建议使用以下方式遍历数组
    • index:下标
    • number:下标对应的值
      */
      for (index, number) in numberArray.enumerate() {
      print("(index): (number)")
      }
    一般对一种数据结构的操作都离不开增删改查
    

    /**

    • 对数组进行-增、删、改、查
      */
      var courses = ["高数(一)", "高数(二)", "英语", "数据结构"]

    // 增
    courses.append("体育")
    courses = courses + ["音乐", "语文"]
    courses.insert("物理", atIndex: 2)

    // 改
    courses[0] = "高等数学(一)"
    courses[0..<2] = ["高等数学(一)", "高等数学(二)"]
    courses[0..<2] = ["化学"]
    courses[0..<3] = ["政治", "地理"]

    // 删
    courses.removeFirst()
    courses.removeLast()
    courses.removeAtIndex(1)
    courses.removeAll()

    这里向大家解释一下二维数组的概念:就是一个数组的元素还是一个数组而已,并没有什么特殊的地方
    * 3.2 字典Dictionary(存储 键-值 数据对的无序数据集)
    
    

    var dic: Dictionary<String, String> = ["Swift": "雨燕",
    "Java": "爪哇",
    "Python": "大蟒"]
    // 空的字典
    var emptyDic1: Dictionary<String, String> = [:]
    var emptyDic2: [String: String] = [:]
    var emptyDic3 = Dictionary<String, String>()
    var emptyDic4 = String: String

    dic["Swift"]

    dic.count // 3
    dic.isEmpty
    Array(dic.keys)
    Array(dic.values)

    for key in dic.keys {
    print(key)
    }

    for value in dic.values {
    print(value)
    }

    // 遍历键值
    for (key, value) in dic {
    print("(key): (value)")
    }

    let dic1 = ["1": "A",
    "2": "B",
    "3":"C"]
    let dic2 = ["1": "A",
    "3": "C",
    "2":"B"]
    dic1 == dic2 // true

    var personDic = ["name": "jf",
    "age": "22",
    "height": "178"]
    personDic["age"] = "23"
    var oldName = personDic.updateValue("dongdong", forKey: "name")

    // 增
    personDic["email"] = "weboon@gg.com"

    // 删
    personDic["email"] = nil
    var oldage = personDic.removeValueForKey("age")

    personDic.removeAll()

    * 3.3 集合(无序的数据集)
    注意:集合是没有重复的元素的(唯一性)
    
    

    // 集合
    var skills: Set<String> = ["Swift", "OC"]

    // 空集合
    var emptySet: Set<String> = []
    var emptySet1 = Set<String>()

    skills.count // 2

    skills.isEmpty // false

    let v = skills.first // 随机一个,集合是无序的

    skills.contains("OC")

    for skill in skills {
    print(skill)
    }

    let setA: Set<Int> = [1, 2, 3]
    let setB: Set<Int> = [1, 2, 3, 1, 2, 3]

    setA == setB // true

    // 操作
    skills.insert("HTML")
    skills.remove("HTML")
    skills.removeAll()

    var skillA: Set<String> = ["Swift", "JavaScript"]
    var skillB: Set<String> = ["Swift", "Pthyon"]

    // 并集
    skillA.union(skillB) // 不改变了skillA的值
    skillA.unionInPlace(skillB) // 改变了skillA的值

    // 交集
    skillA.intersect(skillB)
    skillA.intersectInPlace(skillB)

    // 减法:skillA 减去与skillB公用的
    skillA.subtract(skillB)
    skillA.subtractInPlace(skillB)

    // 亦或:取出skillA、skillB之间只出现过一次的元素集合
    skillA.exclusiveOr(skillB)
    skillA.exclusiveOrInPlace(skillB)

    skillA.union(["andriod"])

    // 判断skillC是否为skillA的子集
    var skillC: Set<String> = ["Swift"]
    skillC.isSubsetOf(skillA) // true 子集
    skillC.isStrictSubsetOf(skillA) // true 真子集

    // 超集
    skillA.isSupersetOf(skillC) // true 超集
    skillA.isStrictSupersetOf(skillC) // true 真超集

    // 相离:没有重复的元素
    skillA.isDisjointWith(skillB) // false

    
    小伙伴赶紧试试吧!
    
    刘雨波Demo地址:
    [Play-with-Swift-2](https://github.com/liuyubobobo/Play-with-Swift-2)

    相关文章

      网友评论

        本文标题:Swift基础学习的总结(二)

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