Swift简明教程(二)流程控制

来源:互联网 发布:linux怎么进入root 编辑:程序博客网 时间:2024/05/16 17:50

Swift简明教程(二)流程控制


使用ifswitch进行条件判断,for-inforwhiledo-while进行循环。条件判断时的圆括号时可选的,但是if或者循环体的花括号{}时必须的。

let individualScores = [75, 43, 103, 87, 12]var teamScore = 0for score in individualScores {    if score > 50 {        teamScore += 3    } else {        teamScore += 1    }}teamScore


if语句中,判断条件必须时布尔表达式,也就是说if score { ... }的形式是错误的,它并不会隐式的与0进行比较。


你可以使用iflet一起来判断值是否缺失。这些值被看作是选项(Optionals)。一个选项包含一个值或者nil来表示是否缺失内容。在类型后面添加?标记一个值是一个选项。

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


试验optionalName的值改为nil,看一下能不能得到问候。在if后添加else语句,使得optionalNamenil的时候打印不同的问候语句。


如果选项的值为nil,条件为falseif后的语句被跳过。否则选项的值被赋值给let后的常量,并且该常量的作用域为花括号里面。


Swift里的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 tasts good in soup."}


试验尝试移除default语句,看看有什么错


执行完switch的一个case后,程序会从switch语句中跳出,而不会继续执行下一个case语句,因此在Swift中不需要显式的使用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 = 0for (kind, numbers) in interestingNumbers {    for number in numbers {        if number > largest {            largetst = number        }    }}


largest


试验增加一个变量,记录最大值所在的分类


while会一直循环执行,直到判断条件发生变化。如果使用do-while,循环体至少会执行一次。

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


for循环中通过索引来控制循环,其中..用来创建一个索引的范围,下面两个循环是一样的效果

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


使用..(两点)创建的范围不包括最大值,而...(三点)创建的范围包含最大值。


0 0