使用func 来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值。
创建一个函数。
func 函数名称 (参数名: 参数类型, 参数名: 参数类型) -> 返回值类型。
//创建一个名为sum的函数,计算firstCount与lastCount 的和,他们的类型都是Int 返回值的类型也为Int
func sum ( firstCount:Int , lastCount:Int) -> Int
{
firstCount = 20 // 这是错误写法,在函数中,参数变量类型默认为常量类型,不可更改,如果需要修改参数值,则需要在变量前面加上 var,比如 func sum(var firstCount: Int)-> Int
return firstCount + lastCount
}
函数返回元组
// 用一个元组来返回多个值,
func getPrices() -> (Double,Double, Double)
{
return (3.59,3.69,3.79);
}
var gasprices = getPrices();
//如果返回的值是String类型,可以直接gasprices.属性名称
println("\(gasprices.0,gasprices.1,gasprices.2)")
函数的参数数量是可变的,可以用一个数组获取参数。
func sum(counts:Int...) -> Int//表示,可以有 1 - n 个参数。
var sum = 0
for counts:Intin numbers {
sum += number
}
return sum
}
println("\(self.sumOf(1,2,3,4,5,6,6))")//调用sum 并打印。
函数嵌套
// 函数可以嵌套。被嵌套的函数可以访问外侧函数的变量。
func fifteen() ->Int{
var y = 10
func add(){
y+=5
}
add()//调用嵌套函数
return y
}
println("\(self.fifteen())")
// 函数可以作为另一个函数的返回值。
func incrementer() -> (Int ->Int){
func addOne(number:Int) -> Int{
return 1 + number
}
returnaddOne //返回一个函数类型值。
}
//incrementer返回的是一个函数类型。
var function =self.incrementer()
println("\(function(23))")
// 函数也可以当做参数传入另一个函数。
//表示声明一个matches函数,第一个参数是一个int类型的数组,第二个参数,是一个函数类型,参数为int类型,返回值为Bool值。
func matches(list: [Int], condition:Int ->Bool) ->Bool{
for itemin list{
if condition(item){
returntrue;
}
}
returnfalse
}
func thanTen(number:Int) -> Bool {
// 如果number小于10 了,就返回YES 反之返回NO;
return number < 10
}
//传入的函数有多个参数。
func matches(list: [Int], condition: (Int ,String) ->Bool) ->Bool{ //(Int ,String) 为多个参数的类型
for itemin list{
if condition(item ,"这是第二个参数"){
returntrue;
}
}
returnfalse
}
func thanTen(number:Int,str:String) ->Bool {
println("\(str)")
// 如果number小于10 了,就返回YES 反之返回NO;
return number < 10
}
定义一个名为 mathFunction 的变量,该变量是一个函数类型,它接受2个参数一个int 一个String返回一个bool值, 引用名为,thanTen的函数。var mathFunction: (Int,String) -> Bool =thanTen
//调用matches 方法,第二个参数,可以直接传入函数名称,也可以传入变量mathFunction: (Int, String) -> Bool。
var isflag =self.matches([1,2,3,4,5,6,2,10], condition:thanTen)
函数内部修改参数引用值。
func sum (inout sumCount:Int){
sumCount = 100
}
sum(&sumCount) //需要传入,变量地址值。
println(sumCount) //结果为100