Swift函数与闭包

1.Swfit语法中使用func关键字来申明函数

func sayHi(){
    println("Hi !")
}

结果显示:Hi !

2.带参数和返回值函数,参数为String,返回值为String的函数

func sayHiToPerson(personName:String) ->String{
    return "Hi ! " + personName;
}
println(sayHiToPerson("Girl"))

结果显示:Hi ! Girl

3.外部参数名,在使用的时候会有相应的提示,若外部参数名跟局部参数一样的话只要加个#就可以了

func area(宽 a:Double , 高 b:Double) -> Double{
    return a * b;
}
println(area(宽: 3.0, 高: 3.0))

func area(#a:Double , #b:Double) -> Double{
    return a * b;
}
println(area(a: 3.0, b: 3.0))

结果显示:9.0
结果显示:9.0

4.可变参数,可变参数就是表示如果参数比较多的情况下可以使用 "类型..." 来表示多个参数
a.个函数只能接纳一个可变参数
b.一个可变参数必须位于函数的最后

func sum(x:Int...) -> Int{
    var t:Int = 0
    for v in x{
        t+=v
    }
    return t
}
println(sum(1,2,3,4,5,6))

结果显示:21

5.默认参数,就是当参数未填入时,该参数会传入一个默认参数为ta的值

func sayWhat( who:String = "Lucy" , what:String){
    println("\(who) say \(what)")
}
sayWhat(who: "Tom", "Hello")

结果显示:Tom say Hello

6.变量形参,默认的参数都是为常量,这里也可以定义一个变量形参

func fac(var x:Int) -> Int{
    var s:Int = 1
    while x > 1{
        s*=x--
    }
    return s
}
println(fac(5))

结果显示:120

7.In-Out形参,来交换两个数

func swap(inout a:Int ,  inout b:Int){
    a = a^b;
    b = a^b;
    a = a^b;
}
var a:Int = 1
var b:Int = 3
swap(&a,&b)//传入的实际是a和b的地址
println("交换之后结果为:a=\(a) b=\(b)")

结果显示:交换之后结果为:a=3 b=1

8.元组类型,没有返回值的函数总返回Void,在swift中,Void表示一个元组,无返回值即是一个空元组

func areaWithCircum(#width:Int ,#height:Int) -> (Int , Int){
    return (width*height , (width+height)<<1)
}
println(areaWithCircum(width: 4, height: 4))

结果显示:(16, 16)

9.函数类型,冒号后面是个函数 (Double ,Double) -> Double
a.函数类型可以定义一个常量或者变量

var areaFunc:(Double ,Double) -> Double = area
println(areaFunc(3.0,3.0))

结果显示:9.0

b.函数类型可以做为参数类型

func printlnArea(area:(Double,Double)->Double,width:Double,height:Double){
    println("\(area(width , height))")
}
printlnArea(areaFunc,3,3)

结果显示:9.0

c.函数类型做为返回类型,因为getMathFunc返回的是一个函数........这个函数的参数又是Int,所以需要传入一个参数......

当然也可以写成getMathFunc(type:"squre")(10)

func squre(a:Int) -> Int{
    return a*a
}
func cube(a:Int) -> Int{
    return a*a*a
}

func getMathFunc(#type:String) -> (Int) -> Int{
    if type == "squre"{
        return  squre
    }
    else{
        return cube
    }
}
var mathFunc = getMathFunc(type:"squre")
println(mathFunc(10))

结果显示:100

10.函数嵌套,函数嵌套就是一个函数中包含另一个函数

func getArea(type:String) -> (Int) -> Int{
    func squre(a:Int) -> Int{
        return a * a
    }
    func cube(a:Int) -> Int{
        return a * a * a
    }
    switch type{
    case "squre":
        return squre
    default:
        return cube
    }
}

var getAreaInstance = getArea("squre")
println(getAreaInstance(4))

结果显示:16

在getArea中的squre函数离开getArea就会被销毁,所以squre和cube的函数名没有任何的意义!所以可以使用闭包来简化嵌套函数的写法~

//闭包表达式
//{
//    (形参列表) -> 返回值类型 in
//        可执行表达式
//}

func getArea1(type:String) -> (Int) -> Int{
    switch type{
    case "squre":return {
            (Int) -> Int in
            return a * a
    }
    default:
        return{
            (Int) -> Int in
            return a * a * a
        }
    }
}

仔细观察上面的代码,其实就是 " { xxx  in  xxx  } " 的形式, 前面的xxx 就是" 参数列表 -> 返回类型 " ,后面的xxx 就是表达式...

另外~swift闭包可以通过上下文分析出参数列表,参数列表可以使用$0$1....$n这种方式表示。于是新的写法又出现了~

var result: Int  = {
    var result = 1
    for i in 1...$1{
        result *= $0
    }
    return result
}(3 , 4)
println(result)

结果显示:81

11.尾随闭包,指函数的参数类型为闭包类型

func someFunction (num : Int ,  fn: (Int)-> (Int)){
    //执行代码
    println(num * fn(10))
}
someFunction(20,{ $0 * $0 })

结果显示:2000

捕获上下文中的变量或者常量,总之闭包这个东西很灵活!慢慢分析都是能够弄清楚的~

func makeArr (ele: String) -> ()->[String]{
    var arr : [String] = []
    func addElement() -> [String]{
        arr.append(ele)
        return arr
    }
    return addElement
}
println(makeArr("Lucy")())

结果显示:[Lucy]

时间: 2024-10-10 15:26:18

Swift函数与闭包的相关文章

Swift函数和闭包

函数 Swift 使用func关键字声明函数: 1 func greet (name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet ("Bob", "Tuesday") 通过元组(Tuple)返回多个值: 1 func getGasPrices () -> (Double, Double, Double)

4 .Swift函数|闭包

在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Swift中函数的表现形式如下: 1. func 函数名(参数名1:参数类型,参数名2,参数类型)->返回值类型 {函数的实现部分} func sayHello()->Void { print("hello world") } //有参数,有返回值, func sayHello2(

Swift:函数和闭包

函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数一样有函数的参数和返回值,而且还支持嵌套,并且有函数参数默认值.可变参数等. 1 //定义一个函数,注意参数和返回值,如果没有返回值可以不写返回值或者写成Void.空元组()(注意Void的本质就是空元组) 2 func sum(num1:Int,num2:Int)->Int{ 3 return num1 + num2 4 } 5 6 sum(1, 2) 可以看到Swift中的函数仅仅表示形式有所区别(定义类似于Ja

窥探Swift之函数与闭包的应用实例

今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实例中回类比一下Objective-C中的函数的写法等等.Swift中的函数还是有许多好用的特性的,比如输入参数,使用元组返回多个值, 定义形参名,设定默认参数以及可变参数等等一些好用的特性.而在Swift中的闭包就是Objective-C中的Block, 除了语法不通外,两者的用法是一样的.废话少说

Swift函数闭包

一.闭包的概念 计算机语言要支持闭包的前提条件有2个: 1.支持函数类型,能够将函数作为参数或返回值传递: 2.支持函数嵌套 示例: func caculate(opr : String)->(Int,Int)->Int { var result:(Int,Int)->Int switch(opr){ case "+": result={(a:Int,b:Int)->Int in return a+b } default: result = {(a:Int,b:

Swift 1.1语言第7章 函数和闭包

Swift 1.1语言第7章  函数和闭包 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护.为 了解决这个问题,人们提出了函数这一概念.使用函数可以将特定功能的代码封装,然后在很多的地方进行使用.本章将会讲解函数和闭包的相关内容.本文选自<Swift 1.1语言快速入门> 7.1  函数介绍 函数是执行特定任务的代码块.使用函数会给开发这带来很多的好处.以下总结了其中两点. 1.结构鲜明,便于理解 如果在一

Swift中文教程(四)--函数与闭包

原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: 1 func greet(name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet("Bob", "Tuesday")

swift基础语法三(函数与闭包)

1 // Playground - noun: a place where people can play 2 3 import Cocoa 4 //函数和闭包 5 6 //函数,使用func关键字声明函数: 7 func greet(name:String, day:String) -> String { 8 return "Hello \(name), today is \(day)." 9 } 10 greet("Bob", "Tuesday&

苹果新的编程语言 Swift 语言进阶(六)--函数和闭包

一 .函数 1.1. 函数的定义和调用 函数的定义以func关键字作为前缀,接着是函数名字,接着跟着一个可以带有参数,也可以不带参数的圆括号,接着用-> 指示函数的返回类型.函数执行体用一对大括号{}包围.如下定义了一个函数名为sayHello的函数,该函数包含一个名字为personName,类型为String的输入参数. func sayHello(personName:String) -> String { let greeting ="Hello, " +person