swift 学习笔记(18)-函数

函数 function

var str = "Hello, playground"
// 定义函数 func 关键字
func printStr (){
    print(str)
}
// 调用函数,函数名+()

printStr()

这里写图片描述

有参数有返回值的函数

// 传入一个字符串,返回字符串的字符的个数

// 函数的声明 + (参数名:参数类型)->(返回值类型)
// str 即是外部参数,也是内部参数
func lenthOfString(str:String)->(Int){
    return str.characters.count
}
let len = lenthOfString(str: "zhangsan")
print(len)

这里写图片描述

多参函数

// 求和函数

func sum(a:Int , b:Int)->(Int){
    return a + b

}
print(sum(a:5,b:6))

这里写图片描述

利用元组实现多返回值

func minAndMac(a:Int,b:Int)->(min:Int,max:Int){
    let min = a < b ? a : b
    let max = a > b ? a : b
    return(min,max)
}

print(minAndMac(a: 10, b: 20))

这里写图片描述

可选类型作为参数或者返回值

func maxAndmin(a :Int? ,b:Int?)->(max:Int,min:Int)?{
// 输入的参数为可选类型,所以用值绑定来接收一下输入的值,如果输入的值不为空,就将输入的值强制解包,并执行下面的代码
  if let a = a , let b = b {
    let max = a > b ? a : b
    let min = a < b ? a : b
    return (max ,min)
    }
// 如果输入的值为空,则不进行比较,直接返回
    return nil
}

// 返回值也有可能为空,进行只绑定,如果返回值不为空,就将返回值强制解包,并执行下面括号中的代码,如果为空就直接执行 else 中的代码

let result = maxAndmin(a: 20, b: nil )
if let result = result{
    print(result)
}else{
    print("返回值为空")
}

这里写图片描述

参数标签

// 参数标签 是放在参数名前面的另一个参数名作为参数标签,这个标签相当于外部参数名



func printName2(yourName name: String){
    print(name)
}

printName2(yourName: "zhangsan")


// 不制定参数标签的时候,参数名就默认为参数标签
func printName1(name: String){
    print(name)
}
printName1(name: "lisi") //


// 参数名前面加_来忽略外部参数名,即:忽略参数标签
func printName3(_ name: String){
    print(name)
}
printName3("lisi")

新特性,默认参数值

func sayhello(name: String = "wangxiao"){
    print("name =\(name)")
}
// 传入值的时候,就打印传入的值
sayhello(name:"ceshi")
//什么都不传的时候,打印默认值
sayhello()
//:## 可变参数
// 是指参数的个数不确定可能是多个参数
// 比如求任意几个数的和
func sum(_ numbers:Int...)->Int{
    var sum = 0
    for number in numbers{
        sum += number

    }
    return sum

}
sum(1,3,3,5,7)
print(sum(2,4,6))

输入输出参数 关键字 inout

//:## 参数值修改
var a = 23
func changeNumber(a:Int){
    //error: left side of mutating operator isn't mutable: 'a' is a 'let' constant
    // 参数默认都是常量 let 修饰的,在函数内部,不能改变函数外部的值,函数内部修改的值,都是值拷贝
    var a = a
    a += 2
    print(a)

}
changeNumber(a: a )
print(a)

// 比如交换两个变量的值
var numbera = 10
var numberb = 20

func swapNumber(a:inout Int,b:inout Int){
    let c = a
    a = b
    b = c
}
swapNumber(a: &numbera, b: &numberb)
print("numbera = \(numbera),numberb = \(numberb)" )

函数类型


// 可以将函数当做一种数据类型,或者当做变量
//第一个函数
func sum3(a :Int, b:Int)->Int{
    return a + b
}
//第二个函数
func minus3(a :Int, b:Int)->Int{
    return a - b
}
// 这两个函数有个共同特点,参数都是两个 int 类型参数,返回值也是 int,所以可以定义一个变量代表这个函数类型

var hanshuStyle : (Int,Int)-> Int

// 这时候, 就可以将这种类型的函数,赋值给这个变量了
hanshuStyle = sum
hanshuStyle(5,5)


// 函数类型的变量作为参数
func style(a : Int,b:Int,operation: (Int,Int)-> Int )->Int{
    return operation(a,b)
}
style(a: 33, b: 33, operation: sum3)
style(a: 33, b: 33, operation: minus3 )

// 函数类型作为返回值

func getOperation(key:String)->((Int,Int)->Int){
    switch key {
    case "+":
        return sum3
    default:
        return minus3
    }
}
//这个时候,函数返回的就是一个加法的函数类型, f 就相当于一个加法的函数
var f =  getOperation(key: "+")
f(25,23)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值