//函数
1.函数的定义与使用
//定义格式 func 函数名(参数类型:参数名,参数类型:参数名……) -> 返回类型
func greet(){
print("hello,swift")
}
greet()//hello.swift
func getMax(num1:Int,num2:Int) -> Int{
return max(num1, num2)
}
getMax(num1: 1, num2: -1)//1
2.为函数的参数设置默认值
func isPass(num1:Int,num2:Int=60){
if(num1>=num2){
print("pass")
}else{
print("fail")
}
}
//使用带默认参数的函数时,传参数时,可以忽略带参数的参数。
isPass(num1: 78)//pass
isPass(num1: 45,num2:10 )//fail
3.设置可变的函数参数数量
func getSum(nums:Double...) -> Double{//使用...添加在变量类型后面即可定义可变参数,表示该类型的参数数量不确定。一个函数最多只能
var sum:Double = 0 //使用一个可变参数且可变参数只能位于其他参数之后
for temp in nums{
sum += temp
}
return sum
}
getSum()//0
getSum(nums: 24,151,1.2)//176.2
4.函数作为参数
func add(num1:Int,num2:Int) -> Int{
return num1+num2
}
func operationAdd(function:(Int,Int)->Int,num1:Int,num2:Int){
print("sum=\(function(num1,num2))")
}
operationAdd(function: add, num1: 7, num2: 8) //15
5.函数作为返回类型
func getBigger(num1:Int,num2:Int) -> Int{
return max(num1, num2)
}
func getSmaller(num1:Int,num2:Int) -> Int{
return min(num1, num2)
}
func choose(mychoose:Bool) -> (Int,Int) -> Int{ //返回一个函数,函数具有两个int的参数,并且返回类型为int
return mychoose ? getBigger:getSmaller
}
let mychoose = choose(mychoose: true)
mychoose(5,1)//5
6.元组作为返回类型
func getStudent() ->(name:String,sno:String){
let name = "zhangsan"
let sno = "110"
return (name,sno)
}
getStudent()//{name:"zhangsan",sno:"110"}
7.使用函数类型
//使用函数类型和使用其他类型类似。比如声明一个串类型的变量为var myString:String,相似的,声明一个函数类型的变量格式为 变量类型 变量名:函数(类型,)该变量的类型便为其返回值类型。
func getInstance(num1:Int,num2:Int) -> Int{
return num1 - num2
}
var function:(Int,Int) -> Int //定义了一个函数类型的变量,该类型为两个整型参数并返回整型的函数
function = getInstance//将该函数变量指向函数getinstanc
var result = function(5,4)//1
function = getBigger//将函数变量指向函数getBigger
result = function(0,7)//7
8.函数的输入输出参数
//函数的参数默认是常量,因而在函数体内是不能对参数的值进行修改的,如果需要在函数体内修改参数的值,并且这些修改在函数结束调用时仍然存在,需要在参数类型的前面添加inout标识,并在调用时在参数前面加上&
func changNumber( num1:inout Int, num2:inout Int){
let temp = num1
num1 = num2
num2 = temp
}
var num1 = 1
var num2 = 2
changNumber(num1: &num1,num2: &num2)
print("num1=\(num1),num2=\(num2)") //num1=2,num2=1
9.函数的嵌套
//将一个函数写在其他函数体内,便称为函数的嵌套,这样实现了函数的封装,其作用也不言而喻了
func chooseNumber(needBigger:Bool,num1:Int,num2:Int){
func getBigger(num1: Int, num2: Int){
print((num1>num2) ? num1:num2)
}
func getSmaller(num1: Int, num2: Int){
print((num1<num2) ? num1:num2)
}
needBigger ? getBigger(num1:num1,num2:num2):getSmaller(num1: num1, num2: num2)
}
chooseNumber(needBigger: false, num1: 7, num2: -7) //-7
10.函数的递归用法
//在函数体中直接或间接的调用自己,称之为函数的递归调用。
func total(num:Int) -> Int {
if(num<=1){
return 1
}else{
return total(num: num-2) + total(num:num-1)
}
}
total(num: 5) //8
11.常用的内置函数
//swift语言中自带的函数,可以直接调用
abs(-10)//求绝对值
max(4,5)//求最大值
min(2,4,0,15,0.5)//求最小值
for i in (1...10).filter({$0 % 2 == 0}){
print(i)
}//使用filter进行条件筛选
for i in (1...10).map({$0*3}){
print(i)
}//使用map对数组进行转换
let getResult = (1...4).reduce(0, +)//10 使用reduce对数组进行计算操作并获得一个值