基本的函数定义及调用
//函数带有默认参数值,并且需要传入两个Int类型的参数,返回一个Int类型,
func testWithDeafultValue(value1:Int,myDeafultValue:Int = 27) -> Int
{
let a:Int = (value1 + myDeafultValue)
print(String(a) + "带有默认参数")
return a
}
testWithDeafultValue(value1: 1) // 28带有默认参数
testWithDeafultValue(value1: 1, myDeafultValue: 2) // 3带有默认参数
带有函数类型的参数的函数定义及调用
示例一
// 将无参数且无返回值的函数类型赋给变量 a
var fy:() -> Void = {() -> Void in
print("我是alpha")
}
print(fy) // (Function)
print(type(of: fy)) // () -> ()
// 定义一个方法,参数类型指定为一个函数类型,该函数类型为无参数,无返回值
func myVoidTest(param: () -> Void)
{
// 调用传入的函数
param()
}
/** 调用上面的方法 */
// 方式一
myVoidTest(param: fy) // 我是alpha
// 方式二
myVoidTest {
print("我是瑞克") // 我是瑞克
}
// 方式三
myVoidTest(param: {() -> Void in
print("我是卡妈") // 我是卡妈
})
示例二
// myTest 的参数是一个函数类型的参数,该函数类型参数的参数是Int类型,无返回值
func myTest(param:(Int) -> Void)
{
// 这里调用传入的函数,调用时给到参数为10
param(10)
}
// 调用的时候传入一个符合myTest的参数类型的函数类型参数
myTest { (value:Int) -> Void in
print(value) // 10
}
myTest { (value:Int) in
print(String(value * 2) + " " + "这是有参数无返回值的时候的简写") // 20 这是有参数无返回值的时候的简写
}
myTest { (value) in
print(String(value * 4) + " " + "这是有参数无返回值的时候的简写") // 40 这是有参数无返回值的时候的简写
}
示例三
func testWithPara(param:(Int,Int) -> Int)
{
let a:Int = param(6,3)
print(String(param(10,a)) + "匿名函数")
}
testWithPara(param: {(value1:Int,value2:Int) -> Int in
return value1 * value2 // 可以省略return.
}) // 结果为180匿名函数
// $0,代表第一个参数,
testWithPara(param: {return $0 + $1}) // 结果为19匿名函数
testWithPara(param: {$0 / $1}) // 结果为5匿名函数
/** 来一段小插曲 */
var a:Int = 10
var b:Int = 3
var c:Int?
c = a / b
print(c!)
// 如果将testWithPara方法里的let a:Int = param(6,3)改为let a:Int = param(2,3),程序会报错的,因为0不能做除数呀😝
示例四
我们把文首的定义的那个简单的方法当做示例三方法的参数
testWithPara(param: testWithDeafultValue(value1:myDeafultValue:))
/**
打印结果为(注意打印顺序呦):
4带有默认参数
14带有默认参数
14匿名函数
*/
// 考虑到testWithDeafultValue这个方法里含有一个默认参数,那么我们能不能省略掉呢.
//当然这样是不行的,如果有一个方法和其同名,且只有一个参数,那去找哪个selector呢
testWithPara(param: testWithDeafultValue(value1:))
网友评论