函数
//: Playground - noun: a place where people can play import UIKit //基本的函数 func first() {//无参,无返回 print("first") } first() func first2() -> String {//返回字符串 return "abc" } first2() let r = first2() r let _ = first2() //下划线忽略不管 func first3(a:Int) ->Int { print(a) return 5 } first3(a: 4) //first3(3) //不能省略a //subString(startIndex:1,length:3)swift的语法理念是语法越长越容易理解和阅读 func add(firstNumber: Int ,addWithSecond: Int) -> Int { return firstNumber + addWithSecond } add(firstNumber: 3, addWithSecond: 4) //add(addWithSecond: 6, firstNumber: 5 )//不能改变顺序 //参数忽略的问题 func add(_ firstNumber: Int ,addWithSecond: Int) -> Int { return firstNumber + addWithSecond } add(5, addWithSecond: 6) func add(_ firstNumber: Int ,_ addWithSecond: Int) -> Int { return firstNumber + addWithSecond } add(50, 6) //a,和b成为外部参数,argument label(参数标签) //a和b不能在函数体内使用,只能调用时使用 func add(a firstNumber: Int ,b addWithSecond: Int) -> Int { return firstNumber + addWithSecond } add(a:5, b: 6) /************ 可变长度,默认值 */ //code snippet //参数可变长度 func add(numbers: Int...) -> Int { var total = 0 for item in numbers { total += item } return total } add(numbers: 1,2,3) //参数有默认值 func add(num1: Int = 2,num2: Int = 3) ->Int{ return num1 + num2 } add(num1: 5) add(num1: 2, num2: 5) add() add(num1: 5, num2: 6) add(num2: 3) //add(num2: 5, num1: 6) //不能改变顺序 func add(num1: Int = 2,num2: Int = 3,num3: Int) ->Int{ return num1 + num2 + num3 } add(num3: 5) add(num1: 1, num2: 2, num3: 3) add(num1: 4, num3: 6) /******* 函数类型 在swift中,函数是第一等的公民,意味着与类同级别 */ let f: (Int,Int)->Int func test1(a: Int,b: Int) -> Int { return 5 } f = test1 f(5, 6) let f2: ()-> Void func test2(){ } f2 = test2 f2() func outer(inner:(Int)->Void) {//函数作为参数传递进去 inner(5) } func test3(a: Int) { print(a) } outer(inner: test3) func demo(doFilter:(Int)-> Bool ) ->[Int]{ let arr = [1,2,6,8,99,6,33] var result :[Int] = [] for item in arr { if doFilter(item){ result.append(item) } } return result } func guolv1(a: Int) -> Bool { if a > 30 { return true } return false } func guolv2(a: Int) -> Bool { if a % 2 == 0 { return true } return false } let rr = demo(doFilter: guolv2) rr func each(handler: (Int,Int)->Void) { let arr = [1,2,6,8,99,6,33] for i in 0..<arr.count { handler(i,arr[i]) } } func myHandler(index: Int,value: Int) { print("index is \(index) value is \(value)") } each(handler: myHandler) func aaa() -> Void { print("this fun is called outer") } func outer2() -> ()->Void {//函数作为返回值返回 return aaa } func outer3() -> ()->Void { func bbb() -> Void { print("this fun is called outer") } return bbb } let recFun = outer2() recFun() outer3()() func outer4(f:()->Void) -> (Int,Int)->(Int,Int) {//函数同时作为参数和返回值 f(); func temp(a: Int,b: Int)-> (Int,Int) { return(a + b,a * b) } return temp } func forOuter4() { print("for outer4") } let outer4Result = outer4 (f:forOuter4) let outer4ResultResult = outer4Result(5,6) outer4ResultResult.0 outer4ResultResult.1