swift函数

swift函数

函数定义

Swift 定义函数使用关键字 func。

定义函数的时候,可以指定一个或多个输入参数和一个返回值类型。

每个函数都有一个函数名来描述它的功能。通过函数名以及对应类型的参数值来调用这个函数。函数的参数传递的顺序必须与参数列表相同。

函数的实参传递的顺序必须与形参列表相同,-> 后定义函数的返回值类型。

语法

func 函数名(参数名1:参数类型, 参数名2:参数类型…) -> 返回值类型 {
    函数体…
    return 返回值
}
//例如:
func funcname(形参) -> returntype
{
   Statement1
   Statement2
   ……
   Statement N
   return parameters
}

常见的几种函数类型

  • 无参无返回值
//无参无返回值函数:三种定义方式
func name1()->Void{
   print("这是一个无参无返回值的函数")
}
name1()

func name2()->(){
   print("这是一个无参无返回值的函数")
}
name2()

func name3(){//最常用
   print("这是一个无参无返回值的函数")
}
name3()
  • 无参有返回值
func name() -> String {
    return "你好!"
}
print(name())
  • 有参无返回值
//例1:
func sum(name:String){
    print("我叫\(name),🤭")
}
sun(name:"森森小仙女")

//例2
func sum(a: Int, b: Int) {
   let a = a + b
   let b = a - b
   print(a, b)
}

sum(a: 20, b: 10)
sum(a: 40, b: 10)
sum(a: 24, b: 6)

内部和外部参数名

函数参数都有一个外部参数名和一个内部参数名。

  • 内部参数

局部参数名在函数的实现内部使用。

func sum(name: String) {
   print(name)
}
//以上实例中 name 为内部参数名,只能在函数体内使用。
  • 外部参数

你可以在局部参数名前指定外部参数名,中间以空格分隔,外部参数名用于在函数调用时传递给函数的参数。

如下你可以定义以下两个函数参数名并调用它:

func sum(firstArg a: Int, secondArg b: Int) -> Int {
   var res = a
   for _ in 1..<b {
      res = res * a
   }
   print(res)
   return res
}
sum(firstArg:5, secondArg:3)

以上程序执行输出结果为:

125

注意: 如果你提供了外部参数名,那么函数在被调用时,必须使用外部参数名。

  • 可变参数

可变参数可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数,其数量是不确定的。

可变参数通过在变量类型名后面加入(…)的方式来定义

需求:求2Int型数的和
需求:求3Int型数的和
想法:能不能设计一个函数,求任意个数的和?也就是这个函数的参数个数是不确定的。---》可变参数

func add(nums:Int...)->Int{
    //问题:如何使用nums这个可变参数?
    print(type(of:nums))//可变参数当成数组来处理
    var sum = 0
    for i in nums{
        sum += i
    }
    return sum
}
print(add(nums:10,20))
print(add(nums:10,20,30))
  • 输入输出参数

引入:为什么需要输入输出参数

需求:定义一个swap函数,交换a\b两个参数的值。
func sum(a:Int,b:Int){
    let tmp = a
    a = b
    b = tmp
    print("a:\(a),b:\(b)")
}
sum(a:10,b:30)
//代码报错:默认情况下参数都是let类型,你可以把值传给他,不能改变

如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。

(1)定义一个输入输出参数时,使用 inout 关键字
(2)只能传递变量给输入输出参数,不能传入常量或者字面量。因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。

注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被var 或者
let 标记。

func sum2(a:inout Int,b:inout Int){
    let tmp = a
    a = b
    b = tmp
    print("a:\(a),b:\(b)")
}
var num1 = 10
var num2 = 30
sum2(a:&num1,b:&num2)
print("num1:\(num1),num2:\(num2)")

函数类型

每个函数都有种特定的函数类型,由函数的参数类型和返回类型组成。

func inputs(a: Int, b: Int) -> Int {
   return a/b
}

inputs 函数类型有两个 Int 型的参数(a、b)并返回一个 Int 型的值。

实例如下:

func inputs(a: Int, b: Int) -> Int {
    return a/b
}
print(inputs(a: 20, b: 10))
print(inputs(a: 36, b: 6))

以上程序执行输出结果为:

2
6

以上函数定义了两个 Int 参数类型,返回值也为 Int 类型。

这两个函数的类型是: (Int, Int) -> Int,可以解读为:“这个函数有两个 Int 型的参数并返回一个 Int 型的值”。

func sum() {
    print("hello, world")
}

sum()函数的类型是: () -> Void,或者叫“没有参数,并返回 Void 类型的函数”

使用函数类型

在 Swift 中,使用函数类型就像使用其他类型一样。例如,你可以定义一个类型为函数的常量或变量,并将适当的函数赋值给它:

var inputs: (Int, Int) -> Int = sum

解析:

“定义一个叫做 inputs 的变量,参数与返回值类型均是 Int ,并让这个新变量指向 sum 函数”。

sum 和 inputs 有同样的类型,所以以上操作是合法的。

现在,你可以用 inputs来调用被赋值的函数了:

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var inputs: (Int, Int) -> Int = sum
print("输出结果: \(inputs(40, 89))")

以上程序执行输出结果为:

输出结果: 129

函数类型作为参数类型和返回类型

我们可以将函数作为参数传递给另外一个参数:

func sum(a: Int, b: Int) -> Int {
    return a + b
}
var inputs: (Int, Int) -> Int = sum
print("输出结果: \(inputs(40, 89))")

func another(inputs: (Int, Int) -> Int, a: Int, b: Int) {
    print("输出结果: \(inputs(a, b))")
}
another(inputs: sum, a: 10, b: 20)

以上程序执行输出结果为:

输出结果: 129
输出结果: 30
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值