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

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


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

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


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


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

var optionalString: String? = "Hello"
optionalString == nil

var 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 = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largetst = number
        }
    }
}


largest


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


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

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

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


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

var firstForLoop = 0
for i in 0..3 {
    firstForLoop += i
}
firstForLoop

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


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


你可能感兴趣的:(Swift简明教程(二)流程控制)