Swift-控制流

在 Swift 中,包裹条件和循环变量的括号可以省略,举个栗子

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores { // 循环语句的小括号可以省略
    if score > 50 { // 条件语句的小括号可以省略
        teamScore += 3
    } else {
        teamScore += 1
    } 
} // 循环语句体的大括号不能省略
print(teamScore)


在 if 语句中,条件必须是一个布尔表达式。什么意思呢?比如以前我们常用 if (a) 来代替 if (a != 0),但是在 Swift 里 if (a) 就会报错,必须写成 if (a != 0)


在 Swift 中有可选值。可选值可能是一个具体的值,也有可能是 nil。在类型后面加一个问号来标记这个变量的值是可选的,比如:

var optionalString: String? = "Hello"
print(optionalString == nil) // 输出结果为 false


可以用 if 和 let 来处理可选值:

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


当 optionalName 不是 nil 时会将值赋给 name,当 optionalName 是 nil 时,条件会判断为 false,大括号中的代码会被跳过。

但是为什么当 optionalName 是 nil 时条件会判断为 false 呢?我想是因为 Swift 中不能直接用 nil 赋值:



这样写可以:

let a : Int? = nil


另一种处理可选值的办法是用 ?? 操作符来提供一个默认值。当可选值缺失时用默认值来代替:

let nickName: String? = nil
let fullName = "John"
let informalGreeting = "Hello \(nickName ?? fullName)" // 输出结果为 Hello John
当 nickName 为 nil 时,就会使用默认值 fullName。


switch 是 Swift 中的一大亮点。在 Swift 里 switch 语句支持任意类型的数据以及各种比较操作!

let name = "some object"
switch name {
case "lala":
    print("111111")
case "okok", "123":
    print("222222")
case let x where x.hasSuffix("object"):
    print("Is it \(x)?")
default:
    print("333333")
}
最终输出结果为 Is it some object?

注意 let x where x.hasSuffix("object") 一句的用法,非常的灵活。感觉有点像 sql 语句。

在 Swift 中每个 case 后都不用写大括号,而且某个 case 匹配成功的话就不会继续往下执行,所以也不需要写 break。


可以用 for-in 来遍历字典,用两个变量来表示每个键值对(如下面的 kind 和 numbers)。别忘了字典是无序的~

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 // 记录最大的数值
var largestKind = String() // 记录最大数的类型
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            largestKind = kind
        }
    } }
print(largest, largestKind) // 输出结果为 25 Square
现在我们有一个字典,字典里有三种不同类型的数,我们要找出其中最大的数,以及这个数的类型。最后我们找到最大的数是 25,它是一个平方数。


while 和其它语言一样,在 Swift 中有 repeat while,它和其它语言中的 do while 是一样的,保证至少能执行一次循环。

var n = 2
while n < 100 {
    n = n * 2
}
print(n)

var m = 2
repeat {
    m = m * 2
} while m < 100
print(m)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章