10-Swift 函数

2016-12-02  本文已影响12人  magic_pill

0、函数概念:

func 函数名(参数列表) -> 返回值类型{
    代码块
    return 返回值
}

例:

func test() -> Int{
    return 12;
}

let a = test()      //12

一、函数的基本使用

func test11() -> Void{
      print("没有参数没有返回值")
}
test11()    //"没有参数没有返回值"
func test12(str:String) {
      print("有参数:\(str),没有返回值")
}
test12(str: "wangyijiang")      //"有参数:wangyijiang,没有返回值"
func test13() -> Int{
      return 13;
}
let a13 = test13()      //13
func test14(a:Int,b:Int) -> Int{
      return a + b
}
let a14 = test14(a: 5, b: 4)    //9
func test15(a:Int,b:Int) -> (Int,Int){
    return (a+2,b+3)
}
let a15 = test15(a: 8, b: 7)
a15.0   //10
a15.1   //10

二、函数的内部参数、外部参数

func test21(name str1:String,addr str2:String) -> String{
    return "姓名是:\(str1),家庭住址为:\(str2)"
}
let info21 = test21(name: "王义江", addr: "北京海淀")  //"姓名是:王义江,家庭住址为:北京海淀"
func test22(name str1:String,_ str2:String) -> String{
    return "姓名是:\(str1),家庭住址为:\(str2)"
}
let info22 = test22(name: "yijiang", "北京海淀")    //"姓名是:yijiang,家庭住址为:北京海淀"

三、默认参数

func test31(第一个数 a:Int,第二个默认参数 b:Int = 8,第三个默认参数 c:Int = 6) -> Int{
    return a + b + c
}
let a311 = test31(第一个数: 5)   //19
let a312 = test31(第一个数: 7, 第二个默认参数: 3, 第三个默认参数: 2)      //12
let a313 = test31(第一个数: 2, 第二个默认参数: 7)      //15
let a314 = test31(第一个数: 3, 第三个默认参数: 5)      //16

四、可变参数

func test41(a41:Int...) -> Int{
    var temp = 0
    for value in a41 {
        temp += value
    }
    return temp
}
test41(a41: 1,2,3)      //6
func test42(a42:Array<String>) -> String{
    var temp:String = ""
    for value in a42 {
        temp += value
    }
    return temp
}
test42(a42: ["yijiang","wang"])     //yijiangwang

五、函数使用注意点:

func test51( a51:inout Int, a52:inout Int){
    let temp = a51
    a51 = a52
    a52 = temp
}
var b51 = 20
var b52 = 10

test51(a51: &b51, a52: &b52)
b51    //10
b52    //20
func test52(){
    
    func test53(){
        print("第二层函数")
    }
    
    print("第一层函数")
    test53()
}
test52()
//第一层函数
//第二层函数

六、函数的类型

func testAdd61(a61:Double,b61:Double) -> Double{
    return a61 + b61
}
//函数的类型为:(Double, Double) -> Double
func testMultipul62(a62:Double,b62:Double) -> Double{
    return a62 * b62
}
//函数的类型为:(Double,Double) -> Double
func test63(a63:Double,b63:Double,method:(Double,Double) -> Double){
      method(a63, b63)
}
test63(a63: 5, b63: 6, method: testAdd61)   //11
test63(a63: 5, b63: 6, method: testMultipul62)     //30
func test64(str:String) -> (Double,Double) -> Double{
      if str == "add" {
        return testAdd61
      }else{
        return testMultipul62
      }
}
test64(str: "add")(3,4)     //7
test64(str: "123")(3,4)     //12

此时,可以将返回值类型放在 () 中,更有层次感:

func test64(str:String) -> ((Double,Double) -> Double){
      if str == "add" {
        return testAdd61
      }else{
        return testMultipul62
      }
}
test64(str: "add")(3,4)     //7
test64(str: "123")(3,4)     //12
上一篇下一篇

猜你喜欢

热点阅读