美文网首页iOS学习iOS开发
Swift(二 控制语句 集合类型)

Swift(二 控制语句 集合类型)

作者: DSA碼侬 | 来源:发表于2017-08-08 15:20 被阅读15次

第七章 控制语句

1、分支语句(条件语句)

if
  • if
    大括号不能省略。判断句必须有明确的真假(Bool值),不再有非0 nil即真

     var score = 95
     if score > 85 {
         print("Good")
     }
    
  • if-else
    条件满足为true,那么else就跳过。如果为false,忽略if语句,直接执行else语句组。

  • else-if
    多个分支中只执行一个语句组。

guard (只能在函数里面使用)

在Swift2之后新添加的关键字。目的是替换复杂if-else语句的嵌套,提高可读性。guard-else,在条件不满足的情况下执行else语句return\throw,满足的话就跳过else,好处是条件直接是自己想要的,而不是再想出用它的补集做判断guard解析 函数里面跟return 循环里面跟break continue 根据语境选择关键字。

  func guardFun(score: Int){
       guard  score > 85 else{
              print(" not Good")
              return // 方法内使用
       }
     print("Good") // 这是需要执行的代码 
 }
switch
  • switch可以比较整数、浮点数、字符、字符串、元组等类型,既可以是离散的 又可以是连续的。
  • switch后面必须有个default语句,case与default后面不需要显式添加break语句,分支执行完其中一个case或者default语句就会跳出swich语句,不再是遇到break才跳出switch。但是, 在enum枚举中,枚举值如果全部列举出来,default可有可无,最好不加。
  • 当case后面跟着多个离散值的时候,用“ , ”分离开即可,是 ”或“ 的关系。
  • fallthrough case穿透

2、循环语句

while、repeat-while(相当于do-while)、for-in

while条件语句只能写一个Bool类型的表达式。不存在非0即真

while 循环条件{
    满足条件要执行的语句组  // 最少执行0次
}

repeat {
    满足条件要执行的语句组  // 最少执行1次
}while 循环条件
Swift3:for语句只能与in关键字结合使用。对范围和集合进行遍历。不再有 for-i
for v in 1...3 {  // v不用加let var关键字. 如果循环里面用不到v  就换成下划线_  循环更高效。
      print(v*v)
}

let numbers = [1, 2, 3, 4, 5]
for item in numbers {
    print("count is \(item)")
}
// 非要利用索引index 调用enumerated()->(index, element)返回元组实例函数
for (index, element) in numbers.enumerated() {
     print("index:\(index), element:\(element)")
}
 // 这个方法也可以用到索引k
 for k in 0..<numbers.count {
         print("index\(k+1)----value\(numbers[k])")
}

3、跳转语句

break 标签写在循环前面
  label1: for i1 in 1...3 {
       label2: for i2 in (1...2).reversed() {  // reversed()反向遍历区间
            if i2 == i1 {
                 break label1  // 跳出标签为label1的循环
           }
       print("(i1, i2) = (\(i1), \(i2))")
     }
}
#结果:(i1, i2) = (1, 2)
continue

可带标签 也可不带标签。

 label1: for i1 in 1...3 {
       label2: for i2 in (1...2).reversed() {  // reversed()反向遍历区间
            if i2 == i1 {
                 continue label1  // 跳出标签为label1的循环体中尚未执行的语句,接着进行label1的条件判断,决定是否继续循环。
           }
       print("(i1, i2) = (\(i1), \(i2))")
     }
}
#结果:
   (i1, i2) = (1, 2)
   (i1, i2) = (3, 2)
   (i1, i2) = (3, 1)
fallthrough - 贯通之意,用在switch中

如果符合的case最后加了fallthrough,那么这个case之后的case\default代码会继续执行。不再有fallthrough或者碰到default是最后要执行的, 执行完就结束switch分支语句。

4、区间运算符 (两种)

  • 闭区间:1...3 代表: 1 <= 范围 <= 3 (1是下临界值 3是上临界值)
  • 半开区间: 1..<3 代表: 1 <= 范围 < 3 (1是下临界值 3是上临界值)

5、where语句

类似SQL中的where语句。能用在swith\for语句中,进行条件过滤。

  • case (xx1, let age, xx3)where age>20:
    // 要执行的代码... let age是值的绑定

  • // numbers是个数组
    for item in numbers where item > 5 {
    print("Count is: (item)");
    }

第八章 Swift原生集合类型

1、数组

  • Array是结构体类型,是一个一维泛型集合。元素是有序的,可以重复出现。
    声明:

    var studentList: Array<String>
    var studentList1: [String]
    

    初始化:声明的时候,可以初始化 也可以不初始化。但是 let定义的数组为不可变数组 必须声明的时候初始化,以后也不可以修改。

     var student: [String] = ["张三", "李四", "王五"]  // : [String] 去掉更常用
    

    特殊初始化:

      // 进行了初始化 var studentList1: [String]只声明 没有进行初始化,即没有开辟内存空间
      var studentList2 = [String]()   // 常用
      var studentList3 = Array<String>()   // 不常用
    
  • 可变数组的插入元素:

      student.insert("刘备", at: student.count)
      #warning  student.count 是指数组的长度
      student.append("lpn")  // 追加元素
    
  • 删除元素

         student.remove(at: 1)
    
  • 修改元素

         str[0] = "qwe"
    
  • 取出元素

          str[0]
    
  • 遍历数组

    1、for (index, value) in student.enumerated() {
       print("\(index)---\(value)") // index是索引,value是元素
    }
    
    2、for i in 0..<student.count{ ...  }
    
    3、for name in str {  // 直接遍历
            print(name)
         }
    4、for name in str[0...1] {
          print(name)
     }
    
  • 数组的合并: 相同类型的数组才能允许合并

     str + str1
    

2、Set

  • 是由一串无序的,不能重复 的相同类型元素构成的集合。结构体类型,也是一个一维泛型集合。

  • Set声明 let不可变 var可变

    var studentList: Set<String>
    
  • Set初始化

     // 初始化
    var studentList1: Set<String> = ["张三", "李四", "王五", "赵六"]
    var studentList2 = Set<String>()
    // var studentList3 = ["张三", "李四"] 这个默认的是数组
    // var studentList3: [String] = ["张三", "李四"] 这个默认的是数组
    
  • Set操作 无序!!始终操作对象在最左边

    insert(_:) // 插入一个元素  在开始的位置
    removeFirst() // 删除最后一个元素(即是左边第一个元素)
    remove(_:)  // 删除指定的元素
    contains(_:) // 是否包含某个元素  返回Bool
    
  • 遍历与数组遍历一样 for - in ,enumerated()->(index, value)元组

  • Set运算

    let A: Set<String> = ["a", "b", "e", "d"]
    let B: Set<String> = ["d", "c", "e", "f"]
    
    A.intersection(B) // 交集 {"e", "d"}
    A.union(B)  // 并集 {"b", "e", "a", "f", "d", "c"}
    A.symmetricDifference(B) // 异或  属于A但不属于B 属于B但不属于A {"b", "f", "a", "c"}
    A.subtracting(B) // A与B的差集 {"b", "a"}
    A.isSubset(of: B) // A是B的子集吗 返回Bool值 false
    

3、字典---即使类型一直也不能相加+合并,数组可以

  • 同名映射\散列表 结构体类型 也是一个泛型集合

  • 字典的声明:

    var dict1: Dictionary<Int, String>
    var dict2: [Int: String]  // 属于简写
    
  • 初始化:let定义的(不可变)字典的同时 必须进行初始化

    var dict1 =  Dictionary<Int, String>()  // 可变字典先创建 后赋值
    var dict2 = [Int: String]()  // 可变字典常用[Int: AnyObject]() AnyObject指类型,而NSObject指创建对象
    var dict3 = [102 : "123"]  // 类型也可以带上  不可变的字典常用简单
    var dict3: Dictionary<Int, String> = [102 : "123"]
    var dict3: [Int: String] = [102 : "123"]
    
  • 添加

     var dict1 = [String: AnyObject]() // 不同类型
     
     dict1["height"] = 1.88 as AnyObject
     dict1["name"] = "xxx" as AnyObject
     dict1["age"] = 18 as AnyObject
    
  • 删除

      dict1.removeValue(forKey: "name")
    
  • 修改

    dict1["name"] = "123" as AnyObject // 如果name  key不存在那么久add添加,如果存在就update修改  同updateValue
    
    var dict3:[Int: String] = [102 : "123"]
    var replaceStr = dict3.updateValue("456", forKey: 102)
    print(replaceStr!)   // 返回被替换的值打印 ”123“
    
  • 遍历

    var dict3:[Int: String] = [102 : "张三", 103: "李四", 104: "王五"]
    
    for key in dict3.keys {
        print(key)
    }
    for value in dict3.values {
       print(value)
    }
    for (key , value) in dict3 {  // 逗号分隔键值对,返回元组类型
       print("\(key)-\(value)")
    }

相关文章

  • Swift(二 控制语句 集合类型)

    第七章 控制语句 1、分支语句(条件语句) if if大括号不能省略。判断句必须有明确的真假(Bool值),不再有...

  • 第八章 Swift 循环

    Swift 语言提供了以下几种循环类型 循环控制语句 循环控制语句和OC一样,不通点在于Swift在case条件下...

  • Swift语句参考!

    在 Swift 中,有两种类型的语句:简单语句和控制流语句。简单语句是最常见的,用于构造表达式和声明。控制流语句则...

  • iOS开发 - 「Swift 学习」Dictionary集合类型

    Swift语言Dictionary集合类型的创建、遍历 Swift 的字典类型是无序集合类型 Dictionary...

  • Swift -- 集合类型

    Swift 集合类型 Swift 语言提供Arrays、Sets和Dictionaries三种基本的集合类型用来存...

  • 七、MySQL存储过程

    存储过程:是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理 参数:输入类型 输出类型 输入&&...

  • Swift语法--集合类型

    集合类型 提供三种集合,数组、合集、字典。Swift中的集合总是明确能储存的值的类型。 Swift中的集合是采用泛...

  • Swift - 控制流

    控制流语句,用于控制程序正在执行的流程。Swift中,控制流语句主要为条件语句和循环语句。 条件语句 if条件语句...

  • Swift(零)目录

    Swift(一)常量和变量Swfit(二)数据类型Swift(三)字符串、数组和字典Swift(四)条线语句和循环...

  • 控制流

    上一篇:基础运算当前篇:控制流下一篇:集合类型 从大体来讲控制流分为条件语句和循环语句,而这两种语句差不多就是程序...

网友评论

    本文标题:Swift(二 控制语句 集合类型)

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