Swift语法_函数参数与返回值

函数是用来完成特定任务的独立的代码块。你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数
需要执行的时候,这个名字会被用于“调用”函数。

Swift 统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂 的带局部和外部参数名的
Objective-C 风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传
入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改。

在 Swift 中,每个函数都有一种类型,包括函数的参数值类型和返回值类型。你可以把函数类型当做任何其他普
通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的
定义可以写在在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。

举个栗子:

//函数定义规范:以func作为前缀。指定函数返回类型时,用返回箭头 -> (一 个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示

func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

函数参数与返回值:

//无参函数
func sayHelloWorld()->String{
    return "hello,world"
}
print(sayHelloWorld())
//一个参数的函数
func sayHello(personName:String)->String{
return "hello , " + personName + "!"
}
print(sayHello("niki"))


func sayHelloAgain(personName:String)->String{
  return "hello agin, " + personName + "!"
}
print(sayHelloAgain("Frank"))
//多参函数
func sayHello(personName:String,alreadyGreeted:Bool)->String{
    if alreadyGreeted {
    return sayHelloAgain(personName)
    }else{
    return sayHello(personName)
    }
}
print(sayHello("niki", alreadyGreeted: true))
//无返回值函数
func sayGoodbye(personName:String){
print("Goodbye, \(personName)!")
}
sayGoodbye("Paul")
/*注意
严格上来说,虽然没有返回值被定义,sayGoodbye(_:) 函数依然返回了值。没有定义返回类型的函数会返回特 殊的值,叫 Void 。它其实是一个空的元组(tuple),没有任何元素,可以写成 () 。
*/
//一个返回值函数
func printAndCount(stringToPrint:String)->Int{
    print(stringToPrint)
    return stringToPrint.characters.count

}
printAndCount("hello world")

//被调用时,一个函数的返回值可以被忽略(但定义了有返回值的函数必须返回一个值)
//忽略样式
func printWithCount(stringToPrint:String){
    printAndCount(stringToPrint)
}
printWithCount("hello world")
//多个返回值函数(元组样式)
func minMax(myArray:[Int])->(min:Int,max:Int){
    var currentMin = myArray[0]
    var currentMax = myArray[0]

    for value in myArray[1..<myArray.count]
    {
        if  value < currentMin
        {
            currentMin = value
        }else if value > currentMax
            {
                currentMax = value
            }
    }
    return(currentMin,currentMax)
}
////元组的成员不需要在元组从函数中返回时命名,因为它们的名字已经在函数返回类型中指定了
let bounds = minMax([2,3,4,5,8,89])
print("min is \(bounds.min) and max is \(bounds.max)")

***************优化空数组解决如下***************

/**
* 可选元组返回类型
  如果函数返回的元组类型有可能整个元组都“没有值”,你可以使用可选的(Optional) 元组返回类型反映整个元组可以是 nil 的事实。
  定义一个可选元组,例如 (Int, In t)? 或 (String, Int, Bool)?

可选元组类型如 (Int, Int)? 与元组包含可选类型如 (Int?, Int?) 是不同的.
可选的元组类型,整个元组是可选的,而不只是元组中的每个元素值。
*/

func minMax(array: [Int]) -> (min: Int, max: Int)? {
    if array.isEmpty { return nil }
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}

//使用可选绑定来检查 minMax(_:) 函数返回的是一个实际的元组值还是 nil :
if let bounds = minMax([8, -6, 2, 109, 3, 71]) {
    print("min is \(bounds.min) and max is \(bounds.max)")
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值