swift 7. 控制流
swift 7. 控制流标签(空格分隔): swift 之前说完了swift中的基本数据结构,基本语法,以及字符串、数组、字典,今天看了下貌似又过去好久没有跟新swift了,罪过啊。 今天开始跟新下。争取过年回家前全部学完。 今天来说下swift中比较重要,当然也是比较简单的控制流。啥是控制流,控制流就是 OK,进入正题。 循环语句swift中 for - in你可以使用for-in循环来遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符等 看第一个例子:循环出1-5分别乘以5的结果。 for i in 1...5 {
print("(i)*5=(i*5)");
}
//输出结果
1*5=5
2*5=10
3*5=15
4*5=20
5*5=25
这个时候,用 这里的 还有一种情况是, let base = 3
var answer = 1
for _ in 1...10 {
answer *= base
}
print("(base) 的 10 次方 is (answer)")
//3 的 10 次方 is 59049
当然上面的 我们继续深挖 var fruit = ["apple","orange","tomorrow","banana"];
for i in fruit {
print(i);
}
//输出
apple
orange
tomorrow
banana
既然数组可以循环,那么字典也应该循环,前面几节说到字典的时候,也提到过 var student = ["name":"tony","age":18,"gender":1];
for (key,value) in student {
print("student info is (key) : (value)");
}
//输出
student info is name : tony
student info is age : 18
student info is gender : 1
同样, var info = "abcdef";
//swift 1 中
for character in info {
println(character);
}
//swift 2中得用 info.characters,不然报错
for character in info.characters {
print(character);
}
//输出
a
b
c
d
e
f
forfor就更容易理解和掌握了,swift中的 for var index = 0; index < 3; index++ {
println("index is (index)")
}
// index is 0
// index is 1
// index is 2
对不对,和其他语言中几乎一模一样吧。就是这种书写形式有点怪不习惯,写多也就差不多了。 说到这,那我们看下,其他语言中 php: for ($index = 0; $index < 3; $index++) {
echo $index;
}
javascript: for (var index = 0; index < 3; index++) {
console.log(index);
}
C: for (int index = 0; index < 3; index++) {
println(index);
}
所以,你看,是不是很简单的。 whilewhile 循环也是非常简单的,如果你学过其他的语言,对while循环也不会陌生,swift中while和其他语言也几乎一样,不同的也只是少了
那看个例子,一个数自减,少于4就停止: var istrue = true;
var num = 10;
while istrue {
num--;
if num < 4 {
istrue = false;
}
print(num);
}
//输出
9
8
7
6
5
4
3
所以, repeat - while
我们还是看刚才 var istrue = true;
var num = 10;
repeat {
num -= 1;
if num < 4 {
istrue = false
}
print(num)
} while istrue
//输出
9
8
7
6
5
4
3
条件语句swift中提供了几种条件判断语句, ifif 语句很简单,和其他的语言一样,只是又少了括号而已。o(╯□╰)o 直接来看例子吧: var height = 155;
if height < 170 {
print("身高太矮了!");
}
//打印
身高太矮了!
var height = 175;
if height < 170 {
print("身高太矮了!");
} else {
print("身高符合要求!");
}
//打印
身高符合要求!
如果,有好几种条件判断,那么单纯的 var height = 170;
if height < 130 {
print("滚粗")
} else if height < 160 {
print("勉强接受")
} else if height < 180 {
print("完美身高")
}
//打印
勉强接受
其他,我们也可以和 var age = 16;
if age < 16 {
print("未成年!")
} else if age >= 16 && age < 20 {
print("少年")
} else if age >= 20 && age < 35 {
print("青年")
}
//输出
少年
switchif 很简单,当然switch 也不难,学过其他语言的,也会对swift中的switch也很熟悉,它也是一个条件判断语句,只不过这个条件判断看着更舒服更清晰,值得一提的是我们使用其他语言中的switch时,经过会忘记加 但是swift非常聪明,它合理的避开个这个问题,即使你没加上 break ,后面其他的case 也不会被执行。永远只会匹配一个 swift 的 switch 书写形式如下: switch some value to consider {
case value 1:
respond to value 1
case value 2,value 3:
respond to value 2 or 3
default:
otherwise,do something else
}
我们举个例子来看下: var gender = 1;
switch gender {
case 1:
print("男的")
case 0:
print("女的")
default:
print("人妖")
}
你看我们是没加 那你说,有时候我的一些变态需求就是希望它执行下面的case,咋办!有办法,有一个关键字 上面说了,swift的 所以下面的这个是会自己报错的,因为,case 是单匹配的,所以,它每一个 case 分支都必须包含至少一条语句: let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a":
case "A":
print("The letter A")
default:
print("Not the letter A")
}
// 会报编译错误。
case 多个匹配let someCharacter: Character = "e"
switch someCharacter {
case "a","e","i","o","u":
print("(someCharacter) is a vowel")
case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
print("(someCharacter) is a consonant")
default:
print("(someCharacter) is not a vowel or a consonant")
}
// 输出 "e is a vowel"
在这个例子中,第一个 case 分支用于匹配五个元音,第二个 case 分支用于匹配所有的辅音。 牛逼不?一个case可以匹配这么多。大赞啊。 case 区间匹配前面讲 let people_num = 1000;
var naturalCount: String
switch people_num {
case 0:
naturalCount = "没人"
case 1...3:
naturalCount = "3人以内"
case 4...9:
naturalCount = "4到9个人"
case 10...99:
naturalCount = "10到99人"
case 100...999:
naturalCount = "100到999人"
case 1000...9999:
naturalCount = "1000到9999人"
default:
naturalCount = "人太他妈的多了"
}
print("There are (naturalCount)")
//输出
//There are 1000到9999人
这个功能确实蛮使用和蛮强大的。 case 匹配元祖
let somePoint = (1,1)
switch somePoint {
case (0,0):
print("(0,0) is at the origin")
case (_,0):
print("((somePoint.0),0) is on the x-axis")
case (0,_):
print("(0,(somePoint.1)) is on the y-axis")
case (-2...2,-2...2):
print("((somePoint.0),(somePoint.1)) is inside the box")
default:
print("((somePoint.0),(somePoint.1)) is outside of the box")
}
// 输出 "(1,1) is inside the box"
这个例子中,我们用元祖来表示一个坐标,然后用case 来匹配。是不是很强大啊。你看。 case 值绑定上面说到了case 可以匹配元祖,其实在匹配的过程中,还能将匹配到的这个值给绑定到另一个值上,以备用,这就叫值绑定。需要搭配 var point = (1,1);
switch point {
case (var x,0):
print("匹配到x为(x)")
case (0,var y):
print("匹配到y为(y)")
case var (x,y):
print("匹配到x为(x)y为(y)")
}
//输出
//匹配到x为1y为1
这个例子,不仅匹配到了条件,还把匹配到值给取到了,有点像正则匹配对吧。 case where 条件我们继续深挖case。我们任然可以在匹配的时候,再加条件判断,以达到更加精准,所以可以用 let yetAnotherPoint = (1,-1)
switch yetAnotherPoint {
case let (x,y) where x == y:
print("((x),(y)) is on the line x == y")
case let (x,y) where x == -y:
print("((x),(y)) is on the line x == -y")
case let (x,y):
print("((x),(y)) is just some arbitrary point")
}
// 输出 "(1,-1) is on the line x == -y"
上面的例子中,我们不仅值绑定了x和y,而且还用 控制转移语句控制转移语句是啥呢?就是控制条件语句的转移,和其他语言中基本一样,主要是这几个:
continue 很简单,表示循环的时候跳出本次,继续下一个循环,break 则狠一点,直接退出虽有的循环,return 就是直接返回,下面的语句都不执行了。这3个很简单,就不多说了。着重想说下的就是 fallthrough。 这是swift中有别与其他语言中的一个语法,它的存在前面也说过,是因为swift对switch严格控制了,只会单一匹配一个case,即使不加break,后面的case 也不会被执行。所以为了某些变态需求就是需要贯穿后面所有的,就有了 我们还是举上面的例子,来说明下: var gender = 1;
switch gender {
case 1:
print("男的")
fallthrough
case 0:
print("女的")
default:
print("人妖")
}
//输出
男的
女的
上面我们在 终于把控制流学完了。太他妈不容易了!%>_<% (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |