函数
//: 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