循环的介绍 • 在开发中经常会需要循环 • 常见的循环有:for/while/do while. • 这里我们只介绍for/while,因为for/while最常见
# for循环的写法
Swift循环语句和跳转语句
相比分支语句,
循环语句最大的作用就是让代码重复执行。Swift支持多种循环构造类型:while、repeat while、for、for
in、函数内使用的guard。for和while循环是在执行循环体之前判断循环条件,而repeat
while是在执行循环体之后判断循环条件。这就意味着for和while循环可能一次循环体都不执行,而repeat
while循环至少执行一次循环体,这在编程中按照实际情况来使用。
for in是for循环的变形,是专门为集合遍历设计的。
# for语句
for语句的应用十分广泛,适应性也最强,下面是for语句的格式:
for 初始化; 循环条件; 迭代 {
语句组
}
- 和if语句一样,并不需要括号将判断条件括起来。
- 初始化、循环条件和迭代部分都可以为空语句,但是不能省略分号。三个语句都为空的时候,相当于无限循环。
程序在执行到for语句的顺序是这样的:
1.执行初始化语句(只执行一次),我们可以在这里进行一些循环变量的初始化。 2.判断是否满足循环条件,若满足,就执行语句组,否则跳出for语句。 3.执行迭代语句。 4.一直重复步骤2和步骤3,直到跳出for语句为止。
下面是两个例子,注意两个输出的区别:
for var i = 0; i < 3; i++ {
print(i);
}
打印的结果为:
0
1
2
这里的循环执行了3次,而下面的例子:
for var i = 0; i <= 3; i++ {
print(i);
}
打印的结果为:
0
1
2
3
循环进行了4次。区别就在当i的值是3的情况下,i < 3 和i < =3 哪一种情况能进入循环。只要弄明白了这个区别,for循环也应该掌握了。
# for in语句
for in是专门用于遍历集合的for循环。格式如下:
for 变量 in 集合 {
语句组
}
例如:
let numbers = [0, 1, 2, 3];
for num in numbers{
print(num)
}
打印的结果为:
0
1
2
3
上例可以发现,我们并没有声名num 为变量,它是隐式变量声明的。in后面的集合,for in语句让我们很方便地将集合中的元素一一取出来,保存到num 中。
# while语句
while语句的结构如下:
while 循环条件 {
语句组
}
在while中没有初始化语句,只要条件满足,循环就一直进行下去。
死循环的写法:
while true {
语句组
}
while应用的例子:
var i = 0
while i < 3 {
print(i)
i++
}
打印的结果为:
0
1
2
循环执行了3次。
# repeat while循环
repeat while语句和while语句的区别就是,repeat while语句是先进行一次循环再判断循环条件。
在Swift2.0中,将do while改名为repeat while,其实两者的使用是一样的。
语句的结构如下:
repeat {
语句组
} while 循环条件
例子如下:
var i = 0
repeat{
print(i)
i++
}while i < 3
打印结果是:
0
1
2
# 跳转语句
跳转语句能够改变程序的执行顺序,可以实现程序的跳转。Swift中有四种跳转语句:break、continue、fallthrough和return。
# break语句
break语句的作用是强行退出循环结构,不执行循环结构中剩余的语句。 默认情况下,break语句只跳出最近的循环(if语句不是循环语句),例如:
for var i = 0; i < 3; i++ {
for var j = 0; j < 3; j++ {
if j == 1 {
break
}
print("i的值是:\(i),j的值是:\(j)")
}
}
打印的结果是:
i的值是:0,j的值是:0
i的值是:1,j的值是:0
i的值是:2,j的值是:0
当遇到j == 1 时,执行了break语句,跳出了最近的for var j = 0; j < 3; j++ {} 循环,剩下的语句不在执行,所以打印的j的值只有0而没有1和2。
有另外一种情况就是,当j == 1 ,需要跳出最外面的for var i = 0; i < 3; i++ {} 循环。这时候,可以使用带有标签的break语句,例如:
circulate: for var i = 0; i < 3; i++ {
for var j = 0; j < 3; j++ {
if j == 1 {
break circulate
}
print("i的值是:\(i),j的值是:\(j)")
}
}
打印的结果是:
i的值是:0,j的值是:0
在上面的例子中,我们给最外面的for循环加上了一个标签circulate ,这样,我们就可以使用"break+标签"语句break circulate 来跳出最外面的循环。
# continue语句
continue语句用来结束本次循环,跳过循环体中剩下的语句,判断循环条件是否满足,继续下一次循环或不满足循环条件时跳出循环。 我们将for语句中使用的例子稍以修改:
for var i = 0; i < 3; i++ {
if i == 1 {
continue
}
print(i)
}
打印的结果为:
0
2
由于continue语句的存在,当满足i == 1 时,就执行continue语句 不执行剩下的语句,但是并没有跳出for循环。
continue语言也可以带上标签使用,使用方法和break语句一致,这里就不再详述。
# fallthrough语句
fallthrough是贯通语句,只能在switch语句中使用。当我们需要switch的case分支贯通时,就需要用到fallthrough 语句:
let number = 2
switch number {
case 0,1 :
print("0.1")
case 2 :
print("2")
fallthrough
case 3 :
print("3")
default :
print("nil")
}
打印的结果为:
2
3
在打印了"2"之后,遇到了fallthrough 语句,其作用就是与下面的case3 进行"贯通",执行case 3 内的语句。执行完case 3 中的语句之后,遇到了隐式的break 语句,便跳出了switch语句。
- 如果
case 3 内也有fallthrough 语句,就会与default "贯通",执行default 中的语句。虽然这种情况很少出现,但是Swift依然为我们想得非常周到。
字符串的介绍 • 字符串在任何的开发中使用都是非常频繁的 • OC和Swift中字符串的区别 • 在OC中字符串类型时NSString,在Swift中字符串类型是String • OC中字符串@"",Swift中字符串"" • 使用 String 的原因 • String 是一个结构体,性能更高 • NSString 是一个 OC 对象,性能略差 • String 支持直接遍历 • Swift 提供了 String 和 NSString 之间的无缝转换
# 字符串的使用 # 遍历字符串 // 字符串遍历 var str = "Hello, Swift" for c in str.characters { print(c) } # 字符串拼接 • 两个字符串的拼接 let str1 = "Hello" let str2 = "World" let str3 = str1 + str2 • 字符串和其他数据类型的拼接 let name = "why" let age = 18
let info = "my name is \(name), age is \(age)" • 字符串的格式化 ◦ 比如时间:03:04 let min = 3 let second = 4
let time = String(format: "%02d:%02d", arguments: [min, second]) # 字符串的截取 • Swift中提供了特殊的截取方式 ◦ 该方式非常麻烦 ◦ Index创建较为麻烦 • 简单的方式是将String转成NSString来使用 ◦ 在标识符后加:as NSString即可 //字符串的截取 /* 简单的方式是将String转成NSString来使用 在标识符后加:as NSString即可 */ let mycode = "www.cnblogs.com/Mr-WangKB"
//从哪儿开始截取 var myUrl = (mycode as NSString).substringFromIndex(4)
//从第0个字符开始截取, 共截取多少个字符 myUrl = (mycode as NSString).substringToIndex(4)
//从哪儿开始, 截至字符为第多少个 myUrl = (mycode as NSString).substringWithRange(NSRange(location: 4, length: 11))
|
请发表评论