swift之流程控制


流程控制

用 if 和 switch 做分支,用 for-in,for,while和 do-while 做循环。判断条件和循环变量两边的小括号是可以不写的,但是外面的大括号是必须要写的。

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
teamScore
在  if 语句中,判断条件必须是布尔( Boolean)表达式,也就是说像这样写是错的 if score{...},没有隐式的和 0比较。


为了保证值不丢失可以if和let一起用。这些值就是optional的,optional值既不包含了一个值或nil,表明值缺失。在值的类型的后面加一个问号 来标记这个值是optional

var optionalString: String? = "Hello"
optionalString == nil
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

试一试:

optionalName 设为 nil.会是什么结果?如果optionalName是 nil,加一个else语句,给它设一个不同的问候语。


如果optional值是 nil,那么条件就是false,就会跳出大括号。否则,optional 值就会被解包并赋值到一个常量中,这使得这个解包出来的值能够在代码块中使用。


switch语句支持各种类型的数据和各种比较操作符——不再仅仅是整型和检测是否相等了。

let vegetable = "red pepper"
switch vegetable {
case "celery":
    let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
    let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
    let vegetableComment = "Is it a spicy \(x)?"
default:
    let vegetableComment = "Everything tastes good in soup."
}

试一试:

如果删除default语句会出现什么错误?


执行完一个case语句就会退出switch语句,将不会执行下一个case语句了,所以不用显式的在每个case语句最后面写break了。


使用 for-in 来迭代一个字典,需要提供一个键值对。

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
largest

试一试:

添加一个变量来跟踪哪一种类是最大的,以及最大的数是多少。


使用 while 语句重复执行代码块直到控制条件改变了。控制条件可以卸载循环的最后,以确保至少循环执行一次。

var n = 2
while n < 100 {
    n = n * 2
}
n
 
var m = 2
do {
    m = m * 2
} while m < 100
m

在循环中使用   .. 来控制某一区间,将不用显式的初始化下标变量,条件判断,自增。下面的两个循环做的是同样的事情:

var firstForLoop = 0
for i in 0..3 {
    firstForLoop += i
}
firstForLoop
 
var secondForLoop = 0
for var i = 0; i < 3; ++i {
    secondForLoop += 1
}
secondForLoop

使用   .. 的话不包括上限的值,使用  ... 将包含上限和下限的值。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值