美文网首页
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基础篇——控制流

    顺序结构 循环结构 选择结构 一、循环结构 for-in遍历区间、字符串、数组、字典 for while do-w...

  • swift基础-控制流

    一、For循环 二、whilewhile循环从计算单一条件开始。如果条件为true,会重复运一系列语句,直到条件变...

  • Swift基础 - 控制流

    基本的if 三目运算符 if let guard: 和if let刚好相反的指令 switch语句

  • 9.控制流(theControlFlow)

    控制流 kotlin_控制流 swift控制流

  • Swift 语法基础

    Swift 基础## 目录 控制流的代码优化 字符串代码注意 swift 的数组 字典和集合 函数

  • Swift 4.0 基础学习总结(二)

    在 Swift 4.0 基础学习总结(一)中,我们学习的Swift中的基本数据类型以及控制流,Swift简介的语法...

  • swift学习目录

    Swift中的一些基础知识 Swift中的常量、变量、可选值 Swift中的控制流(if/三目/switch) S...

  • Swift基础之控制流

    Swift提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不同代码分支的if、g...

  • swift基础语法(控制流)

    一、 If语句 判断句不再有非0/nil即真;都有明确的真假(Bool ---> true/false) 二、三目...

  • Swift 基础之控制流

    Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的 for 和 while 循环,基于特定条件...

网友评论

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

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