func greet(name: String, day: String) -> String { 
 
 
    return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
println(greet("Bob", “Tuesday"))

执行结果:Hello Bob, today is Tuesday.
name: String 形式定义变量及类型  ()内用逗号分隔参数,->后跟函数返回类型
///
使用tuple(元组)返回多个值:
func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
println(getGasPrices())
结果是  (3.59, 3.69, 3.79)
(这个可以用在哪里??)


函数可以接受可变参数个个数,就是可以接受不确定个数的参数,并放在数组中进行运算:
func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}

println(sumOf(1, 2, 3))
结果是6
练习:编写函数求平均值:
func sumOf(numbers: Int...) -> Int {
    var sum = 0 ,i=0
    for number in numbers {
        i++
        sum+=number
        }
    
    return sum/i
}
println(sumOf(4, 8, 3))


可以在函数体里定义和调用函数
func returnFifteen() -> Int {
    var y = 10
    func add() {    //定义内嵌的函数
        y += 5
    }
    add()   //执行add()函数
    return y
}
println(returnFifteen())
执行结果 15


//函数可以返回另一个函数:
func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {   //构造这个函数
        return 1 + number
    }
    return addOne       //返回这个函数
}
var increment = makeIncrementer()

println(increment(7))
执行结果 8

//函数可以使用另一个函数作为参数
//若有一个数字符合小于10这个条件,则返回true
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}

func lessThanTen(number: Int) -> Bool {
    println("iii")
    return number < 10
}
var numbers = [20, 19, 7, 12]
println(hasAnyMatches(numbers, lessThanTen))


Functions are actually a special case of closures. You can write a closure without a name by surrounding code with braces ({}). Use in to separate the arguments and return type from the body.
函数可以理解为是闭包的一种特殊形式。你可以写一个没名字的闭包,放入{}中即可。使用in从闭包中分离参数、返回类型。
var numbers = [20, 19, 7, 12]
numbers.map({
(number: Int) -> Int in
let result = 3 * number
    println(result)
    return result;
})
结果:60 57 21 36
等价代码:
numbers.map({number in

    3*number})
 
 重写一个闭包来对所有奇数返回0。
var numbers = [20, 19, 7, 12]
numbers.map({
(number: Int) -> Int in
var result = number
    if (!((number%2)==0))
    {
        result=0
    }
    println(result)
    return result;
})
返回结果:20 0 0 12
 

 //函数嵌套->函数指针
func chooseFC(back:Bool)->(Int)->Int
{
    func bigMore(input:Int)->Int {return input+1 }
    func smallMore(input:Int)->Int {return input-1}
    return back ? bigMore : smallMore
}
 
var x = 4
let condition=chooseFC(x<0)
while x != 0
{
    
    x = condition(x)
    println("\(x)")
}