swift 字典 包含数字_Swift_控制流

麻烦来杯酒…

    当你长期从事一项相同的工作,并且保持在一定的层面,没有任何变化和改观,那就是在自我懈怠、自我消耗。人生有丰年就有荒年,丰年的时候,别瞧不起那些咬碎牙努力的人;荒年的时候,静下心来沉淀自己。只有在努力过后才知道:许多事情,坚持坚持,就过来了。

使用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)

a79ae9955222284fe0e1b62c189eff11.png

说明:首先定义常量的分数数组scores,然后定义初始值为0的团队分数teamScore,接下来使用for-in对分数数组进行循环遍历,然后在for-in循环中使用if-else进行条件判断,当分数大于60分的时候,团队分数加上3分,否则加上1分,最后输出团队的分数。

在if语句中,条件必须是一个布尔表达式——因此对于if score { ... }这样的代码就会报错,而不会隐形地与0作对比。

1a6fe8b20fb8be7a02f4dbdba0f6228b.png

对于值缺失的情况,可以通过使用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)

9abd4de11dc7afbc78b49858843e4d56.png

如果把optName改为nil,那么打印出来的就是hello,也就是说,当变量的可选值为nil的时候,条件就会判断为false,直接跳过大括号中的代码。如果可选值不是nil,则会将值解包并赋给let后面的常量,这样代码块中就可以使用这个值了。

91ea0f5c660ffb819e6a3add3f6a700b.png

也可以通过添加一个else语句来进一步判断下:

859f70a64b469c181c82b8c4525de3e3.png

另一种处理可选值的方法是通过使用 ?? 操作符来提供一个默认值。如果可选值缺失的话,可以使用默认值来代替。

let nickName: String? = nillet realName: String = "Jack Yee"let greeting = "Hi, \(nickName ?? realName)"print(greeting)

254d788847dd06d63266f40e838568f3.png

f47bb52d01c2415b7f85b948c96a30de.png

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。

947bb5eb57ee959fc0ea8252075134a9.png

程序运行switch中匹配到的case语句之后,就会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break。但是如果想让Swift继续执行case之后的语句,可以使用fallthrough语句。

260632a1f4a3120b4ef29283ee775fbd.png

注意:在switch语句中的default分支是不能省略的,否则编译会报错,如下图:

5ad35a8bf0d5dbaabd30474f37f0d744.png

使用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)

100418bdf55a6f162181428c1d844ceb.png

说明:首先定义了一个字典,字典中的值为数组;然后定义了两个变量,用于记录最大数字的值和最大数字对应的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)

bc6c374e3e328405bbc01dea291d3077.png

说明:如图所示举了两个小例子,第一种是先进行条件判断,然后执行操作并改变条件,直到条件不符合退出并输出n的值;第二种是先执行操作并改变条件,然后进行条件判断,类似于Java中的do-while循环语句。

但是Swift并不能像Python那样使用range()来指定范围,但是可以通过使用(..<)或(...)来表示下标范围,前者创建的范围不包含上界,后者包含。

var total = 0

for i in 0 ..< 4 {

    total += i

}

print(total)

94047b2903f4b573eba1f49a2f9b2cea.png

5347c851f2b362080f14b7f637efaa63.png

-----..-----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值