美文网首页
Swift基础篇——控制流

Swift基础篇——控制流

作者: 沫简影 | 来源:发表于2016-11-15 22:53 被阅读14次
    • 顺序结构
    • 循环结构
    • 选择结构

    一、循环结构

    • for-in
      遍历区间、字符串、数组、字典
    • for
    for i in -100...100
    {
        i*i
    }
    //理论上这两个循环是同样的效果,但是在swift 3.0中,推荐使用for-in循环,因为i++已经被废弃,下面的写法会报两个错误:1、++ 和 --将要在Swift3中废弃;可以使用 += 1替代;2、C语言风格的声明将在Swift的未来版本废弃和移除。
    for var i = -100 ; i <= 100 ; i ++
    {
        i*i
    }
    
    • while
    • do-while
    //二分查找法
    var arr:[Int] = []
    
    for i in 0..<100{
        arr.append(Int(arc4random()%1000))
    }
    
    arr.sorted(by: <)//把数组从小到大进行排序
    arr
    
    var min_num = 0 , max_num = arr.count
    
    var mid_num:Int
    var target = Int(arc4random()%1000)
    
    while min_num < max_num {
     
        mid_num = ( min_num + max_num) / 2
        arr[mid_num]
        
        if arr[mid_num] == target {
            print("\(target) is foud index \(mid_num)")
            break
        }
        else if arr[mid_num] > target{
            max_num = mid_num - 1
        }
        else{
            min_num = mid_num + 1
        }
    }
    
    if min_num >= max_num {
        print("cannot find \(target) in arr")
    }
    

    二、选择结构

    • if 语句
    let  imTrueVar = true
    
    let imFalseVar = false
    
    if imTrueVar {
    
    print("I'm true!")
    
    }
    else if 3 + 4 == 7{
    
    print("3+4==7!")
    
    }
    else{
    
    print("I'm false!")
    
    }
    

    『注意』 一般的语言中都会将非零的值定义成真,但是Swift却非如此,例如:

    var  aa:Int = 1
    
    //下面的写法编译器会报错,‘Int’这个整形是不能作为一个逻辑的值来进行这种选择的判断的(error: 'Int' is not convertible to 'Bool'),这也说明Swift是一个类型安全型语言,它要求开发者如果想做选择那就要明确的指明一个逻辑的值,即布尔值或者表达式
    
    if aa{
    
    print("I'm true!")
    
    }
    //正确的写法
    
    if aa == 1{
    
    print("I'm true!")
    
    }
    
    • switch 语句
    • case值可以是Float、Bool、String、Int、元组等
    • 不用显示的写break,在满足一个case的情况下,自动就会break,如果想连续执行,即满足一个case之后还会试图进行下一个case的判断,则使用关键字fallthrough
    • case值和default必须包含所判断的变量的所有情况,只要case能涵盖所判断变量的所有情况,可以不需要使用default
    • 不仅可以对整形变量具体的值进行判断,也可以对整形的范围进行判断
    //switch语句,不需要显示的写break
    var rating:Character = "A"
    
    switch rating {
    case "A","a":
        print("Great!")
    case "B":
        print("Just so-so!")
    default:
        print("It's Bad.")
    }
    
    //switch 语句的一些高级用法
    //不仅可以对整形变量具体的值进行判断,也可以对整形的范围进行判断
    var score = 90
    switch score {
    case 0:
        print("a")
    case 1..<60:
        print("b")
    case 60:
        print("c")
    case 61..<70:
        print("d")
    case 70..<80:
        print("e")
    case 100:
        print("f")
    default:
        print("g")
    }
    
    //可以对元组数据类型进行判断
    var coordinate = (1,1)
    switch coordinate {
    case (0,0):
        print("a")
    case (-2...2,0):
        print("b")
    case (let x,0):
        print("c")
    case (-1,let y):
        print("c")
    case (_,1):
        print("d")
    case (0,_):
        print("e")
    case let (x,y) where x == y:
        print("f")
    case (_,let y) where y > 1 :
        print("h")
    default:
        print("g")
    }
    
    //swift的switch语句不用显示的写braak,在满足一个case的情况下,自动就会break,如果想连续执行,即满足一个case之后还会试图进行下一个case的判断,则使用关键字fallthrough
    coordinate = (0,0)
    switch coordinate{
    case (0,0):
        print("原点")
        fallthrough
    case(_,0):
        print("x 轴")
    case(0,_):
        print("y 轴")
    case(-2...2,-2...2):
        print("区间内")
    default:
        print("都不满足")
    }
    

    三、控制转移

    • fallthrough
      使得switch语句在做一个判断的时候,当变量的值落入了一个case后还有机会落入下一个case

    「使用限制」需要使用fallthrough的case,其下一个case不能声明为变量

    例如:

    //这样是不被允许的
    var coor = (1,1)
    switch coor {
    case (0,0):
      print("a")
      fallthrough
    case (let x,0):
      print("c")
    case (-2...2,0):
      print("b")
      fallthrough
    default:
      print("d")
    }
    
    • break
      • 立即跳出当前的循环体,即结束循环;
      • 不仅仅可以使用于循环结构,也可以用于switch语句,在switch语句中break的用途是结束switch判断
      • 在swift中的switch语句中不要求显示写break,但是需要涵盖所有的判断情况,且case后必须有执行语句,所以如果在某些case中什么操作也没有,这时候就可以使用break
    • continue
      跳过之后的操作,继续当前的循环体,即结束本次循环,进入下一次循环

    break和continue都只是对当前的循环体起作用,但是swift语言提供了另外一种机制,可以使得break和continue这两个控制转移语句对任意一层循环体进行作用。

    例如:

    var board = Array< Array<Int> >()
    for i in 0..<10
    {
        board.append( Array(repeating:0,count:10))
    }
    
    let randx = Int(arc4random()%10)
    let randy = Int(arc4random()%10)
    board[randx][randy] = 1
    
    var ii = 0, jj = 0
    mainloop:for i in 0 ..< 10
    {
        for j in 0 ..< 10
        {
            if board[i][j] == 1 {
                
                break mainloop
            }
            jj += 1
        }
        ii += 1
    }
    print("board[\(ii)][\(jj)] = 1]")
    

    相关文章

      网友评论

          本文标题:Swift基础篇——控制流

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