print("Hello, KeV1n! Happy coding!")
//声明一个函数,使用func关键字,调用函数时需要通过函数的名字和参数来调用。返回值由->来指定
func greet(name:String,day:String) ->String{
return"Hello \(name),today is\(day)."
}
greet("K", day:"111111111")
print(greet("Kev1n", day:"2015/12/09"))
//使用元组定义函数的多个返回值
func getGasPrices()->(Double,Double,Double){
return(3.59,3.69,3.79)
}
print(getGasPrices())
//传递可变数量的参数,通过数组获取参数
func sumOf(numbers:Int...)->Int{
var sum = 0
for number in numbers{
sum += number
}
return sum
}
print(sumOf(13,14,521))
//计算参数平均值的函数
func averageOf(numbers:Int...)->Int{
var sum = 0
for number in numbers{
sum += number
}
return sum/numbers.count
}
print(averageOf(12,13,14,15,16))
//函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的嵌套来重构太长或者太复杂的函数。
func returnFifteen()->Int{
var y = 10
func add(){
y += 5
}
add()
return y
}
print(returnFifteen())
//函数是一级类型,也就是说函数可以使用另一个函数作为返回值
func makeIncrementer() ->(Int ->Int){
func addOne(number:Int) ->Int{
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
print(increment(7))
//函数也可以使用另一个函数作为参数
func hasAnyMatches(list:[Int],condition:Int ->Bool) -> Bool{
for item in list{
if condition(item){
print(item)
return true
}
}
return false
}
func lessThanTen(number:Int) ->Bool {
return number < 10
}
var numbers = [1011,12,2,4,13]
print("numbers数组里面是否有符合条件的数\(hasAnyMatches(numbers, condition:lessThanTen)) ")
//实际上函数是一种特殊的闭包。通过 {}创建一个匿名的闭包,使用 in 将执行体和参数、返回值进行分离
print(numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
}))
//下面这个闭包,使numbers数组里面对所有奇数返回0
print(numbers.map({
(number: Int) -> Int in
var result : Int
if(number%2 ==1){
result = 0
}else{
result = number
}
return result
}))
//有多种更简明创建闭包的方法。如果一个闭包类型已知,比如作为一个回调函数,这时可以忽略它的参数类型、或者返回值类型、或者二者都忽略。单条语句的闭包可以直接将语句的结果当做返回值。
print(numbers.map({ numberin 3*number}))