Swift 3.0 学习笔记之函数

有参数 有返回值

func greet(person:String) ->String{

     let greeting="Hello, "+person+"!"

     return greeting

}

有参数 无返回值

func greet(person:String) {

     print("Hello,\(person)!")

}

无参数 有返回值

func sayHelloWorld() ->String{

    return"hello, world"

}

无参数 无返回值

func noThing() {

 print("nothing")

}

有多个返回值 也就是返回一个元组

func minMax(array: [Int]) -> (min:Int,max:Int) {

        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)

}

Optional Tuple Return Types // 返回可为空的元组的函数

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)

}

Function Argument Labels and Parameter Names // 方法参数是带标签和参数名

func someFunction (argumentLabel parameterName:Int) {

        // In the function body, parameterName refers to the argument value

       // for that parameter.

}

func greet(person:String,from hometown:String) ->String{

       return"Hello\(person)!  Glad you could visit from\(hometown)."

}

print( greet(person:"Bill",from:"Cupertino") )

// Prints "Hello Bill!  Glad you could visit from Cupertino."

输入时省略参数名

func someFunction( _ firstParameterName:Int,secondParameterName:Int) {

      // In the function body, firstParameterName and secondParameterName

     // refer to the argument values for the first and second parameters.

}

someFunction(1,secondParameterName:2)

默认的参数值 当省略那个参数,那么就会显示默认值

func someFunction(parameterWithoutDefault:Int,parameterWithDefault:Int=12) {

         // If you omit the second argument when calling this function, then

        // the value of parameterWithDefault is 12 inside the function body.

}

someFunction(parameterWithoutDefault:3,parameterWithDefault:6)// parameterWithDefault is 6

someFunction(parameterWithoutDefault:4) // parameterWithDefault is 12

Variadic Parameters // 变量参数          可变参数接受指定类型的零个或多个值  (一个函数最多有一个可变参数)

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

In-Out Parameters    可修改参数值的带参函数      默认情况下,函数参数是常量。 试图从函数体内更改函数参数的值会导致编译时错误。 这意味着您不能错误地更改参数的值。 如果希望函数修改参数的值,并且希望这些更改在函数调用结束后保留,请将该参数定义为in-out参数。

func swapTwoInts( _ a : inout  Int, _ b : inout  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"

Function Types  // 函数类型

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

             return a+b

}

var mathFunction: (Int,Int)  -> Int = addTwoInts // 声明一个变量,变量类型是刚才定义的函数的类型

print("Result:\(mathFunction(2,3))") // 那么这个变量就等价于这样一个函数 类似于C中的函数指针

// Prints "Result: 5"

mathFunction=multiplyTwoInts // 指向了另一个函数

print("Result:\(mathFunction(2,3))")

// Prints "Result: 6"

let anotherMathFunction=addTwoInts // anotherMathFunction is inferred to be of type (Int, Int) -> Int

Function Types as Parameter Types // 函数作为参数 (内嵌函数)

func printMathResult( _ mathFunction: (Int,Int) ->Int,_a:Int,_b:Int) {

              print("Result:\(mathFunction(a,b))")

}

printMathResult(addTwoInts,3,5) // Prints "Result: 8"

Function Types as Return Types // 函数作为返回值

func chooseStepFunction(backward:Bool) -> (Int) ->Int{ // 返回类型是 (Int) ->Int 是个函数

      return backward?stepBackward:stepForward

}

varcurrentValue=3

let moveNearerToZero = chooseStepFunction(backward:currentValue>0)

// moveNearerToZero now refers to the stepBackward() function

print("Counting to zero:")

// Counting to zero:

while currentValue != 0 {

       print("\(currentValue)... ")

      currentValue = moveNearerToZero(currentValue)

}

print("zero!")

// 3...

// 2...

// 1...

// zero!

Nested Functions // 函数嵌套

func chooseStepFunction(backward:Bool) -> (Int) ->Int{

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

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

             return  backward ? stepBackward : stepForward

}

var currentValue=-4

let moveNearerToZero=chooseStepFunction(backward:currentValue>0)

// moveNearerToZero now refers to the nested stepForward() function

while currentValue != 0 {

       print("\(currentValue)... ")

      currentValue=moveNearerToZero(currentValue)

}

print("zero!")

// -4...

// -3...

// -2...

// -1...

// zero!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容