循环的介绍
• 在开发中经常会需要循环
• 常见的循环有:for/while/do while.
• 这里我们只介绍for/while,因为for/while最常见
相比分支语句, 循环语句最大的作用就是让代码重复执行。Swift支持多种循环构造类型:while、repeat while、for、for in、函数内使用的guard。for和while循环是在执行循环体之前判断循环条件,而repeat while是在执行循环体之后判断循环条件。这就意味着for和while循环可能一次循环体都不执行,而repeat while循环至少执行一次循环体,这在编程中按照实际情况来使用。
for in是for循环的变形,是专门为集合遍历设计的。
for语句的应用十分广泛,适应性也最强,下面是for语句的格式:
for 初始化; 循环条件; 迭代 {
语句组
}
程序在执行到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循环。格式如下:
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 true {
语句组
}
while应用的例子:
var i = 0
while i < 3 {
print(i)
i++
}
打印的结果为:
0
1
2
循环执行了3次。
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语句只跳出最近的循环(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语句用来结束本次循环,跳过循环体中剩下的语句,判断循环条件是否满足,继续下一次循环或不满足循环条件时跳出循环。
我们将for语句中使用的例子稍以修改:
for var i = 0; i < 3; i++ {
if i == 1 {
continue
}
print(i)
}
打印的结果为:
0
2
由于continue语句的存在,当满足i == 1
时,就执行continue语句
不执行剩下的语句,但是并没有跳出for循环。
continue语言也可以带上标签使用,使用方法和break语句一致,这里就不再详述。
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))
原文:http://www.cnblogs.com/Mr-WangKB/p/5300012.html