1.条件语句
文档描述:
根据特定的条件执行特定的代码通常是十分有用的。当错误发生时,你可能想运行额外的代码;或者,当值太大或太小时,向用户显示一条消息。要实现这些功能,你就需要使用条件语句。
1.1 If语句
if 语句最简单的形式就是只包含一个条件,只有该条件为 true 时,才执行相关代码:
var a = 0
if a == 0 {
print("判断为true")
}
1.2 If else语句
if 语句允许二选一执行,叫做 else 从句。也就是当条件为 false 时,执行 else 语句:
var b = 1
if b == 0 {
print("b为0")
} else {
print("b不为0")
}
Switch Case将会放在后边单独写一篇。
2.条件控制语句
文档描述:
控制转移语句改变你代码的执行顺序,通过它可以实现代码的跳转。Swift 有五种控制转移语句:(这里仅介绍前两个)
continue
break
fallthrough
return
throw
2.1 continue
continue 语句告诉一个循环体立刻停止本次循环,重新开始下次循环。就好像在说“本次循环我已经执行完了”,但是并不会离开整个循环体。
下面的例子把一个小写字符串中的元音字母和空格字符移除,生成了一个含义模糊的短句:
var testtxt = "great minds think alike"
var test01 = ""
for character in testtxt {
switch character {
case "a", "e", "i", "o", "u", " ":
continue
default:
test01.append(character)
}
}
print(test01)
//输出结果
grtmndsthnklk
2.2 break
break 语句会立刻结束整个控制流的执行。break 可以在 switch 或循环语句中使用,用来提前结束 switch 或循环语句。
- 循环语句中的 break
当在一个循环体中使用 break 时,会立刻中断该循环体的执行,然后跳转到表示循环体结束的大括号(})后的第一行代码。不会再有本次循环的代码被执行,也不会再有下次的循环产生。- Switch 语句中的 break
当在一个 switch 代码块中使用 break 时,会立即中断该 switch 代码块的执行,并且跳转到表示 switch 代码块结束的大括号(})后的第一行代码。
这种特性可以被用来匹配或者忽略一个或多个分支。因为 Swift 的 switch 需要包含所有的分支而且不允许有为空的分支,有时为了使你的意图更明显,需要特意匹配或者忽略某个分支。那么当你想忽略某个分支时,可以在该分支内写上 break 语句。当那个分支被匹配到时,分支内的 break 语句立即结束 switch 代码块。- 注意
当一个 switch 分支仅仅包含注释时,会被报编译时错误。注释不是代码语句而且也不能让 switch 分支达到被忽略的效果。你应该使用 break 来忽略某个分支。
下面的例子通过 switch 来判断一个 Character 值是否代表下面四种语言之一。为了简洁,多个值被包含在了同一个分支情况中。 本个实例来源:Swift5.1
let numberSymbol: Character = "三" // 简体中文里的数字 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "١", "一", "๑":
possibleIntegerValue = 1
case "2", "٢", "二", "๒":
possibleIntegerValue = 2
case "3", "٣", "三", "๓":
possibleIntegerValue = 3
case "4", "٤", "四", "๔":
possibleIntegerValue = 4
default:
break
}
if let integerValue = possibleIntegerValue {
print("The integer value of \(numberSymbol) is \(integerValue).")
} else {
print("An integer value could not be found for \(numberSymbol).")
}
// 输出“The integer value of 三 is 3.”
其他关键字以及更多的具体细则和使用长久将在之后的章节学习到
3.可选项绑定
这显然是与可选项类型有关的,可以理解为代码形式的空合运算符,但是有所区别。
var f:Int? = 10
if let value = f
{
print("value的值为\(value)")
}else{
print("没有值")
}
这里需要注意一下, 在var f的时候并没有用!进行解析,因为
if let constant name = optional
{
statements
}
这个语法会自动将解析出来的真实的值直接赋过去,在这个语法当中呢,最好是使用常量let,尽量不使用var变量,当然了,前提是直接在这个if语句当中使用
对比一下空合运算符:
var f:Int? = 10
var value = f ?? 400
print(value)
很显然结果是在空合运算符中,两者值的需要为类型一样;而在可选项绑定当中有一个单独的操作,可以在statement中额外的更改、转换或者打印信息
3.隐式展开
如果明确了可选类型有值,那么就不需要每次都用!来进行解析,直接在定义变量的时候用!进行标记即可
var g:Int! = 100
var h:Int = g //这里注意需要指定类型,如果不指定的话将依然为可选类型。
print(h)
疑问解答:既然我们已经知道g的值为确定值了那么为什么还需要用到 Int!呢?在默认情况下,当我们的运算结果需要为空的时候,var g:int = 100 这样的写法是无法为空的。而只有在可选类型的情况下,g的值才可以变为nil。