麻烦来杯酒…
当你长期从事一项相同的工作,并且保持在一定的层面,没有任何变化和改观,那就是在自我懈怠、自我消耗。人生有丰年就有荒年,丰年的时候,别瞧不起那些咬碎牙努力的人;荒年的时候,静下心来沉淀自己。只有在努力过后才知道:许多事情,坚持坚持,就过来了。
使用if和switch来进行条件操作,使用for-in、while和repeat-while来进行循环。包裹的条件和循环变量的括号可以省略,但是语句体的大括号是必须的。
let scores = [75, 43, 103, 87, 12]var teamScore = 0for score in scores { if score > 60 { teamScore += 3 } else { teamScore += 1 }}print(teamScore)
说明:首先定义常量的分数数组scores,然后定义初始值为0的团队分数teamScore,接下来使用for-in对分数数组进行循环遍历,然后在for-in循环中使用if-else进行条件判断,当分数大于60分的时候,团队分数加上3分,否则加上1分,最后输出团队的分数。
在if语句中,条件必须是一个布尔表达式——因此对于if score { ... }这样的代码就会报错,而不会隐形地与0作对比。
对于值缺失的情况,可以通过使用if和let一起进行处理,也就是将这些值用可选值来代表。这里说到的可选值可以是一个具体的值也可以是表示值缺失的nil。通过在类型后面加一个问号"?"来标记这个变量的值是可选的。
var optString: String? = "hello"print(optString == nil)var optName: String? = "Jack"var greeting = "hello"if let name = optName { greeting = "Hello, \(name)"}print(greeting)
如果把optName改为nil,那么打印出来的就是hello,也就是说,当变量的可选值为nil的时候,条件就会判断为false,直接跳过大括号中的代码。如果可选值不是nil,则会将值解包并赋给let后面的常量,这样代码块中就可以使用这个值了。
也可以通过添加一个else语句来进一步判断下:
另一种处理可选值的方法是通过使用 ?? 操作符来提供一个默认值。如果可选值缺失的话,可以使用默认值来代替。
let nickName: String? = nillet realName: String = "Jack Yee"let greeting = "Hi, \(nickName ?? realName)"print(greeting)
switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等哦~
let vege = "red pepper"
switch vege {
case "calery":
print("print calery")
case "cucumber","watercress":
print("print cucumber/watercress")
case let x where x.hasSuffix("pepper"):
print("print \(x)")
default:
print("print default")
}
说明:第3行代码定义了一个常量vege;值为”red pepper”,4-13行代码是switch-case条件判断语句;第7行代码是case了两个值,不管cege为哪个值都会进入到这条case语句中;第9行代码中的let的作用是将匹配等式的值赋给常量x。
程序运行switch中匹配到的case语句之后,就会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break。但是如果想让Swift继续执行case之后的语句,可以使用fallthrough语句。
注意:在switch语句中的default分支是不能省略的,否则编译会报错,如下图:
使用for-in来遍历字典,需要一对变量来表示每个键值对。字典是一个无序的集合,所以它们的键和值以任意顺序迭代结束。
let smNums = [
"one":[2,5,8,0],
"two":[1,1,11,21,77],
"three":[11,8,33]
]
var maxNum = 0
var maxNumKey = ""
for (key,nums) in smNums {
for num in nums {
if num > maxNum {
maxNum = num
maxNumKey = key
}
}
}
print(maxNum,maxNumKey)
说明:首先定义了一个字典,字典中的值为数组;然后定义了两个变量,用于记录最大数字的值和最大数字对应的key值,第一层for循环用于遍历字典,此时nums对应的是字典中的value,也就是三个数组;第二层循环用于获取数组中的每一个数字;最里面的if语句用来筛选出最大的数字和对应的key值;最后输出这俩值。
使用while来重复运行一段代码直到条件改变。循环条件也可以在结尾,保证能至少循环一次。
var n = 2
while n < 10 {
n += 2
}
print(n)
var m = 2
repeat {
m += 2
} while m < 10
print(m)
说明:如图所示举了两个小例子,第一种是先进行条件判断,然后执行操作并改变条件,直到条件不符合退出并输出n的值;第二种是先执行操作并改变条件,然后进行条件判断,类似于Java中的do-while循环语句。
但是Swift并不能像Python那样使用range()来指定范围,但是可以通过使用(..<)或(...)来表示下标范围,前者创建的范围不包含上界,后者包含。
var total = 0
for i in 0 ..< 4 {
total += i
}
print(total)
-----..-----