import Foundation
//使用while来重复运行一段代码直到不满足条件。循环条件可以在开头也可以在结尾。
var n =2
whilen <100 {
n =n * 2
}
//println(n)//128
var m =2
do {
m =m * 2
}whilem < 100
//println(m)//128
//你可以在循环中使用..或...来表示范围,..不包括上界,而...包括上界。也可以使用传统的写法,两者是等价的:
var firstForLoop =0
for iin0..100 {
firstForLoop += i
}
//println(firstForLoop)//5050
var secondForLoop =0
for iin0...100 {
secondForLoop += i
}
//println(secondForLoop)//4950
var threeForLoop =0
for (var i =0; i <100; ++i) {
threeForLoop += i
}
//println(threeForLoop)//4950
//函数和闭包
//使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值。
func greet(name:String, day:String) ->String {
return"Hello\(name), today is \(day)."
}
var str:String =greet("王光荣","星期天");
//println(str);//Hello 王光荣, today is星期天.
/**
去掉 day 参数,添加一个参数包含今天的午餐选择。
使用元组(tuple)来返回多个值。
**/
func getGasPrices() -> (Double,Double,Double) {
return (3.59,3.69,3.79)
}
var r22 = getGasPrices()
/**?????: 怎么遍历的r22*/
//函数可以接受可变参数个数,收集到一个数组中。
func sumOf(numbers:Int...) ->Int {
var sum =0
for numberin numbers {
sum += number
}
return sum
}
var r3 =sumOf()
var r4 =sumOf(1,2, 3)
//println(r3)//0
//println(r4)//6
//函数嵌套
func returnFifteen() ->Int {
var y =10
func add() {
y +=5
}
add()
return y
} //by gashero
var y = returnFifteen()
println("y=\(y)");//y=15
//函数可以使用变量保存,再使用变量调用函数
var ff1 = returnFifteen()
var rr1 =ff1
println("rr1=\(rr1)");//rr1=15
func add100(x:Int)->Int {
return x+100
}
//????有参数的函数怎么使用用变量保存。
//var ff2 = add100(x:Int)->Int //错
//函数是第一类型的。这意味着函数可以返回另一个函数。
func makeIncrementer() -> ((Int) ->Int) {
func addOne(number:Int) -> Int {
return1 + number
}
return addOne
}
var increment =makeIncrementer()
var increment_r =increment(7);
println("increment_r =\(increment_r)");//increment_r = 8
func makeIncrementer2() -> ((Int,Int) ->Int) {
func addOne(number1:Int, number2: Int) ->Int {
return1+number1+number2;
}
return addOne
}
var increment2 =makeIncrementer2()
var increment_r2 =increment2(7,8);
println("increment_r =\(increment_r2)");//increment_r = 16
//一个函数可以接受其他函数作为参数。
func hasAnyMatches(list:Int[], condition:Int -> Bool) ->Bool {
for itemin list {
if condition(item) {
returntrue
}
}
return false
}
func lessThanTen(number:Int) ->Bool {
return number <10
}
var numbers:Int[] = [20,19,7, 12]
hasAnyMatches(numbers,lessThanTen)
//一个函数可以接受其他函数作为参数。函数为多个参数时
func hasAnyMatches2(number1:Int, condition: (Int,Int) -> Bool) ->Bool {
condition(1,2);
returnfalse
}
func lessThanTen2(number1:Int, number2:Int) ->Bool {
return number1 < number2
}
hasAnyMatches2(100,lessThanTen2)
//????? 函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用 in 到特定参数和主体的返回值。
var ages:Int[] = [1,2,3];
var rr3 =ages.map({
(age:Int) -> Intin
let result =3 * age
return result
})
println(rr3);//[3,6,9]
for rinrr3 {
println(r);
/**
3
6
9
*/
}