设为首页 加入收藏

TOP

Swift 属性 函数(一)
2015-07-24 06:28:42 来源: 作者: 【 】 浏览:84
Tags:Swift 属性 函数

?

?

函数


函数是执行特定任务的代码自包含块。通过给定一个函数名称标识它是什么,并在需要的时候使用该名称来调用函数以执行任务。

?

Swift的统一的功能语法足够灵活的,可表达任何东西,无论是不带参数名称的简单的样式函数,还是带本地和外部参数名称的复杂的Objective-C样式方法。参数可为简单函数调用提供默认值,并且可以被作为输入/输出参数传递,在函数执行完成时修改传递来的变量。

?

Swift中的每个函数都有一个类型,包括函数的参数类型和返回类型。你可以像使用Swift中其他类型一样使用该类型,这使得它很容易将函数作为参数传递给其他函数,甚至从函数中返回函数类型。函数也可以被写入其他函数中以在函数作用于中封装有用的功能。

?

定义和调用函数


当你定义一个函数时,你可以选择性地定义一个或多个名称,类型值作为函数的输入(称为形参),或者定义一个函数结束后返回值的类型(称之为返回型)。每一个函数都有一个函数名,用来描述了函数执行的任务。要使用一个函数时,可使用它的名称进行“调用”,并通过它的输入值(称为实参--argument)来匹配函数的参数类型。一个函数的实参(arguments)必须始终和函数形参(parameter)顺序一致。

?

例如在下面的例子中被调用的函数greetingForPerson,像它描述的那样 -- 它需要一个人的名字作为输入并返回一句针对那个人的问候语。为了实现该功能,你定义了一个输出参数--一个名为personName的字符串值,以及一个String返回类型,包含一个针对那个人的问候语:

 
 
  1. func sayHello(personName: String) -> String {
  2. let greeting = Hello, + personName + !
  3. return greeting
  4. }

所有这些信息都汇总到以func关键字为前缀的函数定义中。使用箭头->来指明函数的返回类型(一个连字符后跟一个向右的箭头),后边跟着返回的类型名称。

?

该定义描述了函数的作用是什么,它期望接收什么,以及完成后返回的结果。该定义可轻易地让你在代码中的其他地方清晰明确地调用该函数:

 
 
  1. println(sayHello(Anna))
  2. // prints Hello, Anna!
  3. println(sayHello(Brian))
  4. // prints Hello, Brian!

你可以通过给它传递一个圆括号内String实参值来调用sayHello函数,例如sayHello(Anna)。由于该函数返回一个String值,sayHello可以被包裹在一个println函数调用中来打印字符串,看看它的返回值,如上图所示。

?

sayHello的函数主体首先定义了一个新的名为greeting的String常量,并将其设置加上personName组成一句简单的问候消息。然后这个greeting以关键字return来传回到函数外部。只要return greeting被调用,函数执行完毕后就会返回greeting的当前值。

?

你可以通过不同的输入值多次调用sayHello的函数。上面的例子显示了如果使用Anna输入值调用它会发生什么,以及以Brian输入值调用时会发生什么。函数为每种情况量身定制了问候语。

?

为了简化这个函数的主体,可把消息创建和return语句合并成一行:

 
 
  1. func sayHello(personName: String) -> String {
  2. return Hello again, + personName + !
  3. }
  4. println(sayHello(Anna))
  5. // prints Hello again, Anna!

?

函数的形参和返回值


在swift中,函数的形参和返回值是非常具有灵活性的。你可以定义任何事情,无论是一个简单的仅有一个未命名形参的工具函数,还是那种具有丰富的参数名称和不同的形参选项的复杂函数。

?

多输入形参

函数可以有多个输入形参,把它们写到函数的括号内,并用逗号加以分隔。下面这个函数设置了一个半开区间的开始和结束索引,用来计算在范围内有多少元素:

 
 
  1. func halfOpenRangeLength(start: Int, end: Int) -> Int {
  2. return end - start
  3. }
  4. println(halfOpenRangeLength(1, 10))
  5. // prints 9

?

无形参函数

函数并没有要求一定要定义的输入形参。下面就是一个没有输入形参的函数,任何时候调用时它总是返回相同的String消息:

 
 
  1. func sayHelloWorld() -> String {
  2. return hello, world
  3. }
  4. println(sayHelloWorld())
  5. // prints hello, world

该函数的定义还需要在函数的名称后跟一对儿圆括号,即使它不带任何形参。当函数被调用时函数名称也要跟着一对儿空括号。

?

无返回值的函数

函数不需要定义一个返回类型。这里有一个版本的sayHello函数,称为waveGoodbye,它会打印自己的String值而不是返回它:

 
 
  1. func sayGoodbye(personName: String) {
  2. println(Goodbye, (personName)!)
  3. }
  4. sayGoodbye(Dave)
  5. // prints Goodbye, Dave!

因为它并不需要返回一个值,该函数的定义不包括返回箭头( - >)和返回类型。

提示:严格地说,sayGoodbye函数确实还返回一个值,即使没有定义返回值。没有定义返回类型的函数返回了一个Void类型的特殊值。这仅是一个空元组,这里边没有元素,可以被写成()。

当一个函数调用时它的返回值可以忽略不计:

 
 
  1. func printAndCount(stringToPrint: String) -> Int {
  2. println(stringToPrint)
  3. return countElements(stringToPrint)
  4. }
  5. func printWithoutCounting(stringToPrint: String) {
  6. printAndCount(stringToPrint)
  7. }
  8. printAndCount(hello, world)
  9. // prints hello, world and returns a value of 12
  10. printWithoutCounting(hello, world)
  11. // prints hello, world but does not return a value

第一个函数printAndCount,打印了一个字符串,然后并以Int类型返回它的字符数。第二个函数printWithoutCounting,调用的第一个函数,但忽略它的返回值。当第二函数被调用时,消息由第一函数打印了回来,但没有使用其返回值。

提示:返回值可以忽略,但一个定义了返回值的函数则必须有返回值。对于一个定义了返回类型的函数来说,如果没有返回值,那么将不允许控制流离开函数的底部。如果试图这样做将出现一个编译时错误。

?

多返回值函数

你可以使用一个元组类型作为函数的返回类型,来返回一个由多个值组成的复合返回值。

?

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj-3295 Tautology 下一篇VOJ 1067 Warcraft III 守望者的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: