美文网首页
Swift-流程控制

Swift-流程控制

作者: X_L_F | 来源:发表于2019-09-27 20:23 被阅读0次

条件

1.ifelse

  • 条件语句的"()"可以省略,但"{}"则不能省略
  • 条件语句的判断条件只能是Bool类型
/**
*   正确示范:条件语句可以省略(),但不能省略{}
*/
let score = 80;
if score <= 100 && score >= 90 {
    print("优")
}else if score < 90 && score >=80 {
    print("良")
}else if score < 80 && score >=70 {
    print("中");
}else if score < 70 && score >=60 {
    print("及格");
}else {q
    print("不及格");
}

/**
*   错误示范:条件语句不为Bool类型
*/
let pass = 1;
if pass {           // 此处会提示不能为Int类型
    print("通过了");
}else {
    print("没通过");
}

2.switch

2.1注意点:

  • switch中默认使用break
  • switch中case后禁止带"{}"
  • switch需要枚举完所有情况
  • switch每个情况至少带有一句语句(备注:不能用";"表示,可以用break)

/**
*   枚举完所有情况1
*/
enum Person {
    case Rose
    case Jack
}

let person = Person.Rose
switch person {
    case .Rose:     // 自带break
        print("\(person)")
    case .Jack:
        print("\(person)")
}
// 结果: Rose


/**
*   枚举完所有情况2
*/
let number = 1
switch number {
    case 1:
        print("first")
    case 2:
        print("second")
    default:        // 需要用default来枚举完所有Int的情况
        break       // 至少一个语句
}
// 结果: first



2.2技巧

2.2.1 switch支持字符串、字符、元组、区间条件等写法
/**
* 支持字符串
*/
let person = "Jack"
switch person {
    case "Rose":
        print("\(person)")
    case "Jack":
        print("\(Jack)")
    default:
        print("Wrong Person")
}
// 结果:Jack

/**
* 支持区间写法
*/
let score = 90
switch score {
    case 90...100:
        print("优")
    case 80...89:
        print("良")
    case 70...79:
        print("中")
    case 60...69:
        print("及格")
    default:
        print("不及格")
}
// 结果:优

/**
*   支持元组写法
*/
let point = (1, 1)
switch point {
    case (_, 1):    // 表示忽略第一个值,匹配第二个值即可
        print("in 1 line")
    case (let x, 1):    // 与上面的效果类似。但此处多了保存第一个值的常量
        print("\(x)")
    case (-1...1, -1...1):  // 此处可表示一个区间
        print("in right area")
    case let (x, y):    // 类似于default的效果,但多了保存值的常量
        <!--print("\(x),\(y)")-->
}

2.2.2 贯穿写法

switch默认自带break,因此若要支持匹配多种情况,则需要明确使用贯穿写法

/**
*   贯穿写法1。使用 fallthrough
*/
let person = "Jack"
switch person {
    case "Jack":
        fallthrough
    case "Rose":
        print("Right Person")
    default:    
        print("Wrong Person")
}
// 结果:Right Person。

/**
*   贯穿写法2。使用","进行分割
*/
let person = "Rose":
switch person {
    case "Jack", "Rose":
        print("Right Person")
    default:
        print("Wrong Person")
}
// 结果:Right Person

2.2.3 where条件的使用

使用where语句可以达到过滤的效果

/**
*   例子1
*/
let point = (1, 1)
switch point {
    case (let x, 1) where x == 1:   // 表示第二个值必须要1,再判断第一个值是否等于1
        print("Right Point")
    default:
        print("Wrong Point")
}

/**
*   例子2
*   该例子效果有点类似区间判断写法
*/
let score = 80
switch score {
    let s where s>=90 && s<=100:
        print("优")
    let s where s>=80 && s<90:
        print("良")
    let s where s>=70 && s<80:
        print("中")
    let s where s>=60 && s<70:
        print("及格")
    default:
        print("不及格")
}

循环

1.while

var i = 0
while i < 3 {
    print(i)
    i += 1
}

备注

出于安全起见,在swift中是没有 ++/-- 概念的。

2.repeat

/**
*   repeat...while类似于do...while,
*   至少执行一次
*/
var i = 0
repeat {
    print(i)
    i += 1
}while i < 3

3.for

3.1 for 主要应用到区间

  • 使用区间
/**
*   例子1:闭区间
*/
for i in 0...3 {
    print(i)
}
// 结果:0,1,2,3

/**
*   例子2:半闭区间
*/
for i in 0..<3 {
    print(i);
}
// 结果:0,1,2
  • for中的条件语句部分不能是字符(串)区间
/**
* 错误示范:使用字符(串)区间
*/
for str in "a"..."b" {
    print(str)
}
// 编译不通过

3.2 遍历数据类型

let names = ["a", "b", "c"]
/**
* 例子1:数组加上闭区间
*/
for name in names[0...2] {
    print(name)
}
// 结果:a b c

/**
* 例子2:数组加上半开区间
*   半开区间的情况下,编译器会自动推算数组的长度
*/
for name in names[0...] {
    print(name)
}
// 结果:a b c

3.3 for的初始量实际上let类型,所以如果需要改变,则需要显示未var类型

/**
* 例子1:
*/
for i in 0...10 {
    print(i)
    i += 2;     // 不允许,因为i实际上为let
}

/**
*   例子2:使用var
*/
for var i in 0...10 {
    print(i)
    i += 2;
}
// 结果:0 2 4 8 10

3.4 for 使用where语句

/**
*   此处where起到一个过滤作用,并不是退出的条件
*/
for i in 0...10 where i % == 0 {
    print(i)
}
// 结果:0 2 4 6 8 10

3.5 间隔遍历

使用stride函数

/**
* 使用stride函数,实际就是返回条件的序列(条件:从0开始,到10结束,间隔为2)
*/
for i in stride(from: 0, to: 10, by: 2) {
    print(i)
}
// 结果:0 2 4 6 8 10

3.6标签语句

利用标签语句可以直接跳出外部循环(效果有点像汇编中jump函数,不过只能用于循环的退出)

var sequeue  = [9, 8, 7, 6, 5, 4, 3, 2, 1]
outer:
    for i in 0..<sequeue.count {
        for j in i+1..<sequeue.count {
            if sequeue[i] > sequeue[j] {
                if sequeue[i] == 5 {
                    break outer
                }
                let tem = sequeue[i]
                sequeue[i] = sequeue[j]
                sequeue[j] = tem
            }
        }
}
// 上述break直接跳出了外层循环

相关文章

  • Swift-流程控制

    条件 1.ifelse 条件语句的"()"可以省略,但"{}"则不能省略 条件语句的判断条件只能是Bool类型 2...

  • Swift-流程控制for循环

    区间 开区间0..<3 ---》0 1 2 闭区间0...3---》0 1 2 3 for循环 基础for循环 i...

  • Swift-流程控制 if else / if let / gu

    if else if 后面只能是Bool类型 if后面的条件可以省略小括号,条件后面的大括号不可以省略 white...

  • Swift-流程控制器switch

    简易代码 case、default后面不能写大括号{} 默认可以不写break不会贯穿到后面的条件 switch必...

  • 5-流程控制

    流程控制 流程 计算机执行代码的顺序就是流程 流程控制 对计算机代码执行顺序的管理就是流程控制 流程分类 流程控制...

  • 04-流程控制及while循环

    流程控制 流程: 计算机执行代码的顺序,就是流程。 流程控制: 对计算机代码执行顺序的控制,就是流程控制。 流程分...

  • swift-控制访问

    public: 可以被模块外访问internal: 可以被本模块访问private: 可以被本文件访问

  • Swift-控制流

    循环语句 for-in , whileif和循环控制语句早退语句 guard else(选修)退出循环语句 bre...

  • Swift-控制流

    使用if和switch来创建条件,并使用for-in,for,while和repeat-while来创建循环。 条...

  • swift-逻辑控制

    for循环结构 for i in -99...99{ i*i} 注:基于c的for循环结构在swift3.0已...

网友评论

      本文标题:Swift-流程控制

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