Swift 中的函数

学习来自《极客学院:Swift中的函数》

工具:Xcode6.4 

直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会

练习一:

 1 import Foundation
 2 
 3 //函数
 4 /*1.定义函数的语法格式
 5     func 函数名(形参列表) -> 返回值类型 {
 6     //可执行语句组成的函数
 7 }
 8 */
 9 //定义和调用函数
10 func sayHello(personName: String) -> String{
11     return "Hello "+personName
12 }
13 println(sayHello("HeYang"))
14 
15 //2.外部参数名 局部参数名:形参类型
16 func area(宽 width: Double,高  height: Double) -> Double
17 {
18     return width * height
19 }
20 print("面积是:")
21 println(area(宽: 3.4, 高: 4.3))
22 //但是这样比较麻烦,所以需要用#号
23 func area_1(#width: Double,#height: Double) -> Double
24 {
25     return width * height
26 }
27 print("改了之后:")
28 println(area_1(width: 34.1, height: 9.2))
29 
30 //3可变参数:在参数类型后面添加 ... 表示该参数
31 func sum(numbers: Int...) -> Int{
32     var total : Int = 0
33     for num in numbers{
34         total += num
35     }
36     return total
37 }
38 println("求和是:\(sum(1,2,3,4))")
39 //要注意的地方:一个函数只能有一个可变参数,而且可变参数只能位于最后
40 
41 //4.默认参数
42 func sayHi(msg: String,name: String = "HeYang"){
43     println("\(name),\(msg)")
44 }
45 sayHi("你好~")
46 sayHi("你好~", name: "world")
47 //不能去掉里面的 name: 也就是带有默认参数的是有外部参数名的,也就是说,默认参数相当于是在外部声明定义的。如果要忽略的话,就在默认参数前面添加下划线:unc sayHi(msg: String,_ name: String = "HeYang")不是_name而是_ name
48 
49 //如果有可变参数,也有默认参数,那么可变参数放在最后面,默认参数只能出现在次后面
50 
51 //5.常量形参 和 变量形参
52 func factorial(var number:Int) -> Int{
53     var result: Int = 1
54     while number > 1{
55         result = result*number
56         number--
57     }
58     return result
59     //变量的形参作用域在函数内部,所以形参怎么变化都是不会影响到外面的变量
60 }
61 print("形参")
62 println(factorial(4))
63 
64 //6.In-Out形参
65 func swap(inout a:Int,inout b:Int){
66     var temp = a
67     a = b
68     b = temp
69 }
70 var a = 1
71 var b = 2
72 swap(&a, &b)
73 println("交换之后,a:\(a) b:\(b)")
74 /*注意
75 1.只能传入变量作为实参
76 2.输入输出参数不能带有默认值
77 3.如果你用关键字,inout标记了一个参数,这个参数不能用var或者let去标记
78 */

运行输出结果是:

练习二:

 1 import Foundation
 2 
 3 //函数
 4 
 5 //1.多个返回值
 6 func area(width: Double,height: Double) -> (Double,Double)
 7 {
 8     var b = width
 9     var a = width * height
10     return (a,b)
11 }
12 println(area(2,3))
13 //2、函数类型
14 func addTwoInts(a: Int, b: Int) -> Int{
15     return a + b
16 }
17 var function: (Int,Int) ->Int = addTwoInts
18 println(function(3,4))
19 //3.函数类型作为参数类型
20 func outfunc(function_1: (Int,Int) ->Int,m:Int,n:Int){
21     println("result:\(function_1(m, n))")
22 }
23 outfunc(addTwoInts ,12,12)
24 //4函数类型作为返回值类型
25 func square(a :Int)->Int{
26     return a*a
27 }
28 func cube(a:Int)->Int{
29     return a*a*a
30 }
31 func getMatchFunction(str:String)->(Int)->Int{
32     switch(str){
33     case "square":
34         return square
35     default:
36         return cube
37     }
38 }
39 var mathFunc = getMatchFunction("cube")
40 println(mathFunc(5))
41 //函数重载
42 func test(){
43     println("无参数的test函数")
44 }
45 func test(msg:String){
46     println("重载的test()函数\(msg)")
47 }
48 func test(msg:String) -> String{
49     println("重载的test()函数,外部参数为\(msg)")
50     return "test"
51 }
52 func test(#msg:String) {
53     println("重载的test()函数,外部参数为\(msg)")
54 }
55 test()
56 var result: Void = test(msg: "何杨")
57 var result2: String = test("哇哦")
58 /*局部参数名不能作为区分重载 运行会报错
59 func test(message:String){
60     println("")
61 }
62 */

运行的结果:

 

posted @ 2015-07-15 12:26  何杨  阅读(228)  评论(0编辑  收藏  举报