swift 函数

定义和使用函数

下面定义名称 sayHello 的函数,只有一个 String 类型的 name 参数,函数返回值为 String 类型。

func sayHello(name:String)->String{     return "Hello,"+name }

函数参数和返回值

没有参数的函数

func helloWorld()->String{    return"Hello World" }

有多个参数的函数,参数之间用逗号分割

func helloPeople(firtName:String,lastName:String)->String{    return"Hello, "+firtName+" "+lastName }

没有返回值的函数

func printName(firtName:String,lastName:String){  print("Hello, "+firtName+" "+lastName) }

有多个返回值的函数,函数通过返回一个元组来返回多个值。

func tuplesFunction(name:String)->(hello:String,goodbye:String){ let hello="Hello, "+name let goodbye="Goodbye, "+name return(hello,goodbye) }

函数参数名称

函数的每一个参数都有外部名称和内部名称,外部名称在调用函数时使用,内部名称在函数内部实现中使用。

默认情况,函数第一个参数会忽略外部名称,后面的参数外部名称和内部名称一致,如下面的示例。

func sayHello(firtName:String,lastName:String){ print("Hello, "+firtName+" "+lastName) } sayHello("zhao",lastName:"Alex")

指定外部名称

下面示例中 firstName 和 lastName 是外部名称,first 和 last 是内部名称,如果指定了外部名称,调用函数时也要写明外部名称。

func sayHello(firtName first:String,lastName last:String){ print("Hello, "+first+" "+last) } sayHello(firtName:"zhao",lastName:"Alex")

忽略外部名称,用下划线来忽略外部名称。

func sayHello(firstName:String,_lastName:String){ print("Hello, "+firstName+" "+lastName) } sayHello("zhao","Alex")

默认参数值

函数参数可以指定默认值,在没有传入参数值时,此参数就使用默认值。

func someFunction(parameterWithDefault: Int = 12) { // function body goes here // if no arguments are passed to the function call, // value of parameterWithDefault is 12 } someFunction(6) // parameterWithDefault is 6 someFunction() // parameterWithDefault is 12

可变参数

函数接受零到多个参数值。

func arithmeticMean(numbers: Double...) -> Double { var total: Double = 0 for number in numbers { total += number } return total / Double(numbers.count) } arithmeticMean(1, 2, 3, 4, 5) // returns 3.0, which is the arithmetic mean of these five numbers arithmeticMean(3, 8.25, 18.75) // returns 10.0, which is the arithmetic mean of these three numbers

输入输出参数

func swapTwoInts(inout a: Int, inout _ b: Int) {   let temporaryA = a    a= b    b = temporaryA }

var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) print("someInt is now \(someInt), and anotherInt is now \(anotherInt)") // prints "someInt is now 107, and anotherInt is now 3"

函数类型

函数类型由参数类型和返回值类型构成,如下示例的函数类型就是 (String, String) -> String

func sayHello(firtName:String,lastName:String){    print("Hello, "+firtName+" "+lastName) }

使用函数类型

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

例如:

func addTwoInts(a: Int, _ b: Int) -> Int {    return a + b }

func multiplyTwoInts(a: Int, _ b: Int) -> Int {    return a * b }

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

下面是另一个例子,一个没有参数,也没有返回值的函数:

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

使用函数类型

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

的函数赋值给它:

var mathFunction: (Int, Int) -> Int = addTwoInts

print("Result: \(mathFunction(2, 3))") // prints "Result: 5"

函数类型作为参数类型

func printMathResult(mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {     print("Result: \(mathFunction(a, b))") } printMathResult(addTwoInts, 3, 5) // prints "Result: 8"

函数类型作为返回类型

func stepForward(input: Int) -> Int { return input + 1 }

func stepBackward(input: Int) -> Int {    return input - 1 }

func chooseStepFunction(backwards: Bool) -> (Int) -> Int { return backwards ? stepBackward : stepForward } var currentValue = 3 let moveNearerToZero = chooseStepFunction(currentValue > 0) // moveNearerToZero now refers to the stepBackward() function

嵌套函数

func chooseStepFunction(backwards:Bool) ->Int{    func stepForward(input:Int) ->Int{       returninput +1    }    func stepBackward(input:Int) ->Int{         returninput -1      }   returnbackwards ?stepBackward(4) :stepForward(3) }

letcurrentValue =3 letmoveNearerToZero =chooseStepFunction(currentValue >0) print(moveNearerToZero)  // 3

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

java基础学习_基础语法(下)01_day05总结

============================================================================= ==...

861
来自专栏机器学习从入门到成神

C/C++学习之路(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

2532
来自专栏微信公众号:Java团长

Java泛型详解——绝对是对泛型方法讲解最详细的,没有之一!

ArrayList可以存放任意类型,例子中添加了一个String类型,添加了一个Integer类型,再使用时都以String的方式使用,因此程序崩溃了。为了解决...

961
来自专栏编程

对Python中的类做简要的分析

在Python中,定义类是通过class关键字,class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪...

19010
来自专栏用户2442861的专栏

理解java Class类

http://blog.csdn.net/bingduanlbd/article/details/8424243/

711
来自专栏Android开发指南

5:面向对象总结

36612
来自专栏大闲人柴毛毛

稳扎稳打JS——“继承”

JS使用原型链实现“继承” JS是“基于对象”的语言,因此没有继承。但可以使用JS的特性实现“继承”——原型链。 JS使用_proto_属性构造原型链,如 ...

4054
来自专栏拭心的安卓进阶之路

深入理解 Java 反射:Class (反射的入口)

深入理解 Java 反射系列: 深入理解 Java 反射:Class (反射的入口) 深入理解 Java 反射:Field (成员变量) 深入理解 Java ...

24410
来自专栏从流域到海域

Python list(列表)

Python一共有6种序列的内置类型,list和tuple是其中最常见的。6种序列的都可以进行的操作包括索引、切片,加(实际上是连接),乘(实际上是复制)...

2236
来自专栏GreenLeaves

JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

一、动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开...

21110

扫码关注云+社区