import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
For 循环用于多次执行一组语句,Swift 提供了两种 For 循环:
For-in 循环用于执行一组语句中的每一项,
包括范围(range)、序列(sequence)、集合(collection)和进展(progression)。
For 条件递增循环用于执行满足一个特定条件时的一组语句,通常为每次循环结束时增加计数值一次
你可以使用for-in循环去迭代集合项,例如数字范围,数组项或者字符串中的字符。
下面的例子打印了一些5的倍数表
*/
for index in 1...5 {
print("第\(index)次执行循环")
}
/**
被迭代的集合是一个包含1到5的闭区间值,正如在用闭区间操作符(…)。
索引值为范围中的第一个值(1),同时循环里的语句将被执行。
在这种情况下,循环里只包含一条语句,它用于第几次执行循环。
在这条语句被执行后,索引值将被更新为范围中的第二个值(2),同时print函数再次被调用,
这个过程将持续直到范围中的末尾。
在上述的例子中,索引是一个常数,它在循环每次迭代开始时被自动设定。
正如,它使用前可以不用声明,不需要用let关键字来声明,通过在循环中包含来做隐式声明。
索引常量只在循环体内有效,
如果你想在循环体之后检查索引值,或者你想让它像变量而不是常量那样工作时,
你必须在循环体之前手动声明。
*/
/**
如果你不需要范围中的每一个值,你可以通过在变量名处使用下划线来忽略索引值:
*/
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
print("answer==\(answer) and base==\(base)")
answer *= base
}
/**
使用for-in循环来迭代数组中的项:
*/
let fruit = ["banana","apple","melon","tomato","pich"]
for name in fruit {
print("I like to eat \(name)!")
}
/**
可以通过获取关键字-值对来迭代字典中的数据,
当迭代字典中的数据时,字典中的每一项将以(关键字-值)元组作为返回值。
你可以在for-in循环体中用显示命名常数来分解(关键字-值)元组的数据以供使用,
但是顺序不是依次的,因为字典的数据是无序的
*/
let numberOfLegs = ["people":"2","cat":"4","spider":"8","ant":"so much"]
for (object,legs) in numberOfLegs {
print("\(object) has \(legs) legs")
}
for cha in "hello".characters {
print(cha)
}
for var index = 0 ; index < 3 ;++index {
print("first for index is \(index)")
}
/**
和 C 语言一样,分号将 For 循环分为 3 个部分,
不同的是,Swift 不需用圆括号将他们包括起来。
执行流程如下:
1.循环启动时,初始化表达式(initialization expression)被调用一次,初始化循环所需的常量和变量。
2.条件表达式(condition expression)被调用,如果表达式的结果为false,循环结束,继续执行 for 循环后的代码;如果表达式的结果为true,则执行 for 循环大括号内部的代码(statements)。
3.执行所有语句(statements)之后,执行递增表达式(increment):通常会增加或减少计数器的值,或者根据语句(statements)修改某一个变量。当递增表达式(increment)执行完成后,重复执行第 2 步。如此循环下去
在初始化表达式中声明的常量和变量(比如 var index = 0)只在 for 循环的生命周期里有效。
如果想在循环结束后继续使用 index ,需要要在循环开始之前声明 index
*/
var index = 0
for ;index<3;++index {
print("second for index is \(index)")
}
print("index out of for is \(index)")
/**
index 在循环结束后最终的值是 3 而不是 2
因为最后一次递增表达式 ++index 被调用将 index 设置为 3,导致 index < 3 是false,终止循环
*/
}
}