import Foundation
println("Hello, World!")
//有返回值的函数
func add(num1:Int,num2:Int)->(Int){
return num1 + num2
}
println(add(2,3))
//无返回值的函数
func names(){
println("xiaobai")
}
//调用函数
names()
//返回元组的函数
func 坐标()->(Int,Int){
return (22,33)
}
println(坐标())
//有返回值,返回元组类型的函数
func user(id:Int)->(name: String, age:Int){
if id > 16{
return("dagou",11)
}else{
return("xiaohua",23)
}
}
var userID = user(2)
println(userID)
//有外部参数名的函数
func classes(name:String,age_num1 num1:Int,classesid_num2 num2:Int){
println("名字\(name),年龄\(num1),学号\(num2)")
}
classes("大牛", age_num1: 22, classesid_num2: 11)
//使用#号能简化外部参数名
func dog(#owner:String,#name:String,#age:Int){
println("\(owner)家的大黄狗\(name)今年\(age)岁了")
}
dog(owner: "小明", name: "大黄", age: 3)
//带有默认参数值的形参
func classes1(name:String, num2:Int = 22){
println("名字\(name),学号\(num2)")
}
classes1("jack")
classes1("dino", num2: 1)//给num2加上默认参数值之后num2相当于外部参数名,不能省略不写
//加上下划线可以忽略外部参数名
func classes2(name:String, _ num2:Int = 22){
println("名字\(name),学号\(num2)")
}
classes2("kite", 33)
//使用输入输出参数在函数内部改变函数外部的变量的值
//输入输出参数:既能输入一个值进来又能输出一个值出去
//定义:在参数名前面加:inout
func change(inout num1:Int){
num1 = 22
}
var a = 10
println(a)//这里输出的a是10
change(&a)
println(a)//这里输出的a是22
//不利用第三个参数交换2个参数的值
//func changes(inout num1:Int,inout num2:Int){
// num1 = num1 + num2//=50
// num2 = num1 - num2//=50-20
// num1 = num1 - num2//=50-(50-20)
//
//}
func changes(inout num1:Int,inout num2:Int){
num1 = num1 ^ num2
num2 = num1 ^ num2
num1 = num1 ^ num2
}
var b = 30
var c = 20
println(changes(&b, &c))
println(b)
println(c)
//函数作为参数的情况
//第一层,参数为一个数组。
func hasAnyMatches(numbers:[Int],condition:(Int)->Bool)->Bool{
for num in numbers{
if condition(num){
return true
}
}
return false
}
func morethanTen (num:Int)->Bool{
if num > 10{
return true
}else{
return false
}
}
println(hasAnyMatches([12,22,33,1,4,3],morethanTen))
//函数作为返回值的情况 返回函数的参数列表 ->返回函数的返回值
func makeFunc()->(Int->Int){
func addFive(a:Int)->Int{
return a+5
}
return addFive
}
var func1 = makeFunc()
println(func1(12))