前面说了swift的语法不专门来讲,因为专门学语法会感觉比较无聊,所以就穿插来讲,在讲界面和效果一段时间,又讲一下语法,这样或许会好点。
这里就来讲Swift中的控制语句和函数。
控制语句
控制语句是实现程序结构和逻辑结构的重要语法,和OC一样,甚至和大多数语言一样,Swift语言提供了两种重要的控制语句。
一:分之语句:根据不同的条件执行不同的代码。
二:循环语句:根据条件反复的执行一段代码。
分之语句
分支语句包括if 和 switch 两种,做过开发都知道,这里就不多说了,下面直接将这些语句在Swift语言中的语法和书写规则,看下面
If 条件语句
简单的if语句语法如下:与其他语言中的同,只是书写的形式不一样罢了。
var age = 20; (Swift是可以不用;的,当然习惯了用;也没事)
if (age > 18){
print("这家伙成年了")
}
也可以把条件外面的小括号去掉,写成:
if age > 18 {
print("这家伙成年了")
}
这样输出的结果是一样的。
有了if当然不能忘记了else.看这里
var age = 15
if age > 18{
print("成年了哦")
} else {
print("还是小屁孩啊")
}
当然也还有比较复杂的结构;
if age > 18{
print ("成年")
} else if age > 12{
print("少年")
}else if age > 2{
print ("童年")
}else{
print("刚断奶吧")
}
多的就不解释了哈,
switch语句
switch语句处理的是某个值在不同情况下触发的方法,这个应该都知道。就不多说了,直接看代码。
var wheather = "晴天"
switch wheather{
case “晴天”:
print(“出去玩”)
case “雨天”:
print("待在家")
case "阴天":
print(”在家睡觉“)
default:
print("其他的")
}
这样就会输出打印:出去玩
区间匹配
另外在swift语言中比其他的语言都要强大,它可以表示某个范围和区间。在case语句中可以使用区间匹配,上面的if-else语句中的例子可以改写成这样:
var age = 200
switch age{
case 0...3:
print("幼年")
case 3...12:
print("童年")
case 12...18:
print("少年")
case 18...100:
print("成年")
default:
print(”老妖怪,不是人啦“)
}
这样就会输出:老妖怪,不是人啦
在switch - case语句中,需要在所有的case表达式后面加上一个default:语句来处理case中不存在的其他情况;
元组
当然我们还可以用元组来匹配多个值;
let boy = (10,"boy")
switch boy {
case (0...20,"boy"):
print ("这是个男孩")
case (21...100,"man")
print ("这是个男人")
default:
print ("其他")
}
这样就会输出:这是个男孩
值绑定
可以在case语句中用变量来接收满足其他条件的元组值,在下面的一个例子中,只要boy的第二个参数满足条件,就会被case中的条件接受并将第一个参数赋值给age。
如果前面的条件都不满足,则会进入最后一个case,同时接收两个值,因为有最后一个case,所以不用default:语句。
let boy = (10,"girl")
switch boy {
case (let age,"boy"):
print("男孩: \(age)")
case (let age,"man"):
print ("男人: \(age)")
case (let age,let sex):
print ("\(sex):\(age)")
}
这样就会输出:girl : 10
where语句
在case语句中,除了以上几种方式外,还有更加灵活的条件判断方式,就是:配合元组和where语句实现复杂的条件:
let boy = (50,"man")
switch boy {
case let (age,sex) where age < 12 && sex != "boy" && sex != "man" :
print ("女孩: \(age)岁")
case let (age,sex) where age > 12 && sex == "man" :
print ("男人:\(age)岁")
case let (age,sex):
print("\(sex) : \(age)岁")
}
这样就会输出:男人:50岁
语句的作用域
作用域是指独立的代码块,也就是用 { } 包含起来的代码块片段,在代码块中可以使用在这个代码块之前的外部定义的变量;
var str = "ios"
if true {
print("str") //输出:ios
}
当然要是在 { }里面定义的变量,在 { } 外面是无法使用的:例如这样就会报错
if ture {
var str = "Java"
}
print (str) //报错
在代码块中可以定义与代码块外面变量名相同的变量:
var str = "swift"
if true {
var str = "ios"
print (str) //输出:ios
}
print(str) //输出:swift
根据就近原则。多的就不说了,都是一些基础的语法,好简单哦,做过开发,这些都是小菜。只是讲一下swift在书写上与其他语言上的差异吧。
循环语句
说到循环无非也就是for循环和while循环。
for循环(for循环和forin循环)
for循环结构如下:
var sum = 0
for var i = 1;i < 100;i ++{
sum +=i
}
print(sum)
输出:5050
forin循环主要用于遍历一个区间,一个数组或者一个字符串中的字符
1.区间:
var sum = 0
for i in 1...100{
sum += i
}
print(sum)
输出:5050
2.数组
var strarr = ["OC","java","Swift"]
for str in strarr{
print(str + "")
}
输出:OC java Swift
3.字符串
var string = “Java”
for ch in string{
print(ch + " ")
}
输出:J a v a
和其他 语言好像没什么区别,就在书写上不怎么相同,不多说了,简单的过一遍吧。
while 循环(while循环和do-while 循环)
while循环,就是会一直循环执行循环体{ }内的代码,知道while后的条件为false
var sum = 0
var i = 0
while i < 100{
sum +=i
i ++
}
print (sum)
输出:5050
do-while循环是while循环的另一种形式
var sum = 0
var i = 0
do{
sum +=i
i ++
} while i < 100
print(sum)
输出:5050
注意:在while循环中,先是判断条件是否满足,如果满足则进入第一次循环,如果不满足则跳过循环,而do-while循环,不管怎样,都会进入循环体执行第一次循环,然后再进行条件判断,也就是说,do-while至少会执行一次循环体。
跳转语句和块标签
在程序的执行过程中,有的时候需要改变代码的执行顺序,比如,我们在做循环时,遇到某种特殊情况时跳出本次循环或者结束循环,这时候就需要跳转语句对程序的运行进行更多的控制;
1.continue语句
continue语句想必大家都用过,它的作用就是结束本次循环(跳过continue语句之后的代码),并开始下一次循环,好了,我们来看一下代码;
var strArr = ["hello","word","iOS","OC","Swift"]
for str in strArr{
if str.hasPrefix("w"){
continue
}
print(str + "")
}
输出:hello iOS OC Swift
这段代码就是遍历数组中的字符串,并且过滤掉以“w”开头的字符串
2.break语句
break语句在循环语句中作用就是终止循环并跳出循环。
还是拿上面的代码为例子。
var strArr = ["hello","word","iOS","OC","Swift"]
for str in strArr{
if str.hasPrefix("w"){
break
}
print(str + "")
}
输出:hello
3.fallthrough语句
这个语句可能在OC的开发中没有使用过,那在这里就来简单的说说这个语句的用法。
Swift语言中switch - case 语句与C语言中的不一样,C语言的case语句具有跟随效应,如果没有break语句,一个case执行完后会继续执行下一个case。
在C语言中,当某一个条件为真时,执行相应的代码块,并且会继续向下执行下面的case语句中的代码,如果想要不执行,就需要加入break语句。
而在Swift中,默认情况下是在每一个case语句的末尾存在一个break语句。如果也想要实现C语言中的效果,那就说到了这个没有见过的语句了。就是在case的代码中加入fallthrough语句了。
var age = 1
switch age {
case 0...3:
print("幼年")
fallthrough //case 条件成立,同时,这里有fallthrough语句,所以会继续执行下一个case的代码块
case 3...12: //虽然这里的case不满足条件,但是依然会执行。
fallthrough //这里有fallthrough语句,所以程序还会继续跳转到下一个case语句的代码块。
print("童年") //这在fallthrough后面,所以不会执行到。
case 2...17:
print("少年") //这里没有fallthrough语句,所以不会继续往下执行
case 18...150:
print("成年")
fallthrough
default:
print("没有这样的怪物啊")
}
输出:幼年 少年
从上面的代码可以看出:
1.如果某一个case条件成立,并且在对应的代码块中有fallthrough语句,则无论下一个case条件是否满足,都会向下执行下一个case语句的代码块;
2.同一个case语句代码块中的fallthrough语句后面的内容将无法执行;
3.所有的case分支中默认存在一个break语句,如果没有fallthrough语句,将推出switch - case语句;
函数
在程序的开发过程中,某些逻辑处理会被经常使用或者在处理复杂问题时,需要将独立的功能块提取出来,供其他地方使用,这就是函数。
说得有点多,做过开发的哪个不知道函数,尽在瞎逼逼扯蛋。:)直接看swift独特的书写格式吧。
func add(a:Int ,b:Int) -> Int{
return a+b
}
print(add(10,20))
输出:30
在Swift中,定义一个函数需要用“func”关键字来修饰,add是函数名,()内是入参,->后面是出参类型。
定义好一个函数后,可以在程序中任意位置使用该函数。
函数的参数
1.无参函数
这个大家都知道,那就是没有参数的函数,
func show(){
print("显示")
}
show()
输出:显示
2.带参数函数
不文字说明了,直接代码了
func show(str:String){
print("显示:" + str)
}
show("内存不足呀")
输出:显示:内存不足呀
3.参数标签
在上面的例子中定义完一个函数后,在使用时,所有的参数都会以字面量或者实参的方式传递到函数内,当函数的参数过多时,每一个的参数的意义将不能明确;例如下面:
func studentInfo(name:String,age:Int,height:Int,Number:String){
print("姓名:\(name) 年龄:\(age) 身高:\(height) 电话号码:\(Number)")
}
studentInfo("王八",25,175,"13838389438")
输出:姓名:王八 年龄:25 身高:175 电话号码:13838389438
在调用函数时,25和175一看过去,我们并不知道他们具体的意义。为了解决这个问题,所以就引入了参数标签。也就是说,给每个参数指定一个名字,在函数调用时,可以通过标签来了解对应参数的具体含义。
func studentInfo(sName name:String, sAge age:Int, sHeight height:Int, sPhoto Number:String){
print("姓名:\(name) 年龄:\(age) 身高:\(height) 电话号码:\(Number)")
}
studentInfo(sName:"王八", aAge: 25, sHeight:175,sPhone:"13838389438")
输出:姓名:王八 年龄:25 身高:175 电话号码:13838389438
这样在函数调用的时候,每个参数就能显示对应参数的名称。另外,如果在外部使用的参数标签与函数内使用的常量名称一致,可以用“#”号来表示。
func studentInfo(#name:String , #age:Int , #height:Int , #Number:String){
print("姓名:\(name) 年龄:\(age) 身高:\(height) 电话号码:\(Number)")
}
studentInfo(name:"王八", age:25, height: 175, Number: "13838389438")
输出:姓名:王八 年龄:25 身高:175 电话号码:13838389438
函数的返回值
这个就不多说了,就是调用函数后,函数会有一个返回值返回。
func add (a:Int, b:Int)->Int{
return (a+b)
}
add(20,30)
输出:50
函数的变量参数
今晚先到这。。。。。。。。。。。。。。。。。。。。。。