Swift(五)函数

2017-07-06  本文已影响165人  YvanLiu

更新:2018.05.24

整理了一下demo:SwiftDemo


  • 函数是一个组织在一起的程序代码集合,用来完成某一个特定的功能。

函数格式如下:

func 函数名(参数变量: 类型, 参数变量: 类型) -> 返回类型 {
        
    }
func buildSubviews() {
       
}
func tableView(tableView: UITableView) {
        
}
func buildHeaderView() -> UIView {
      
    }
func sum(num1: Int, num2: Int) -> Int {
      
}

当调用包含多个参数的函数时,必须要传递形同数量的参数。

为参数设置默认值

func sum (x:Int = 1, y:Int = 2) -> Int { 
    return x+y
}

在开发中,有的时候就会遇到需要默认值的函数,如上,等号后面的就是默认值。当函数中有一个传入参数没有传入时,就会采用默认值。

设置可变的参数数量

    func mean (numbers:Double...) -> Double {
        if numbers.count==0 {
            return 0.0
        } else {
            var temp :Double = 0
            for number in numbers {
                
                temp += number
            }
            return temp/Double(numbers.count)
        }
    }

这是一个求 Double类型平均值的函数,第二、三行代码是为了防止没有传入参数导致程序崩溃。
下面是for循环累加除参数数量,求平均值。

函数作为参数和返回类型

    func smaller (num1:Int, num2:Int) -> Int {
        return(num1 > num2) ? num2 : num1
    }
    func bigger (num1:Int, num2:Int) -> Int {
        return(num1 > num2) ? num1 : num2
    }
    
    func printMathResult(mathFunction:(Int,Int)->Int,num1:Int,num2:Int) {
        print("The result is \(mathFunction(num1,num2))" + ".")
    }

这里是三个函数:

printMathResult(mathFunction: smaller(num1:num2:), num1: 1, num2: 2)
printMathResult(mathFunction: bigger(num1:num2:), num1: 2, num2: 3)
    func smaller (num1:Int, num2:Int) -> Int {
        return(num1 > num2) ? num2 : num1
    }
    func bigger (num1:Int, num2:Int) -> Int {
        return(num1 > num2) ? num1 : num2
    }
    func chooseFunction(big:Bool) ->(Int,Int)->Int {
        return big ? bigger : smaller
    }

前两个函数还是上面的两个,求最大值和最小值。
只是这一次它们在第三个函数中作为返回参数存在。
如果输入的big是true的话,就返回求最大值的函数,反之返回求最小值的函数。
然后我们可以在viewDidLoad()或其他地方进行一些操作

        let function = chooseFunction(big: true)
        print(function(2,4))

我们定义了一个常量,并根据传入函数的的参数值为truebigger函数赋予function常量。


function的返回值是(Int,Int)->Int

嵌套函数

接着上面的例子,来搞一个嵌套函数
嵌套函数,顾名思义就是在函数中有另外一个函数。函数里面的函数只在本函数中有作用。

    func chooseNumber(big:Bool,number1:Int,number2:Int) {
      
        func getSmaller() {
            print((number1>number2) ? number2 : number1)
        }
        
        func getBigger() {
            print((number1>number2) ? number1 : number2)
        }
        
        big ? getBigger() : getSmaller()
        
    }

这个函数表示,在chooseNumber函数中,有两个函数即打印最大值函数getBigger 和打印最小值函数getSmaller,由传入的Bool来控制调用哪个函数输出数值。
并且,getBiggergetSmaller只能在函数chooseNumber中使用。

函数的输入输出参数

比如交换两个传入参数的值

    func swap(num1: inout Int, num2: inout Int) {
        let temp = num1
        num1 = num2
        num2 = temp
    }
        
        var number1 = 2
        var number2 = 3
        swap(num1: &number1, num2: &number2)
        print(number1)
        print(number2) 

常用的内置函数

Swift包含众多的内置函数,这里只介绍几个常用的,

print(abs(-1))

输出结果为1

print(min(3,4,1))

输出结果为1

print(max(2,5,3,1))

输出结果为5

filter函数用于查找在数组元素中,满足指定条件的元素,例如查数组中1~10能被3整除的数字。

        let numbers = [1,2,3,4,5,6,7,8,9,10]
        
        for i in numbers.filter({$0%3==0}) {
            print(i)
        }

$0表示忽略了参数名,而使用默认参数为$0
输出结果为:

3
6
9

map函数通常用于将数组中的每个元素,通过指定的方法进行转换。例如将数组中的每个整数都成3:

        let numbers = [1,2,3,4,5,6,7,8,9,10]
        
        for i in numbers.map({$0*3}) {
            print(i)
        }

输出结果为:

3
6
9
12
15
18
21
24
27
30

reduce函数可以把数组元素组合计算为一个值,比如将数组中每个数字进行加法计算,获得元素之和。

        let numbers = [1,2,3,4,5,6,7,8,9,10]
        let sum = numbers.reduce(0, {$0+$1})
        print(sum)

第一个参数为初始值,这里设置初始值为0了,就是将 0,1...到10依次相加。
也可以这样写

        let sum2 = numbers.reduce(0, +)
        print(sum2)

省略到上面的闭包。

上一篇 下一篇

猜你喜欢

热点阅读