美文网首页
每天学一点Swift----函数(二)

每天学一点Swift----函数(二)

作者: 冯可乐同学 | 来源:发表于2017-05-19 19:37 被阅读46次

三.函数类型

1. Swift的每个函数都有类型的,函数类型由函数的形参列表,返回值类型组成。

2.使用函数类型定义变量:就像使用普通类型定义变量一样。举个栗子:

var myFun : (Int, Int) -> Int//定义一个变量,其类型为(Int,Int)-> Int

var test : (String) -> String//定义一个变量,其类型为:(String)->String

定义了函数类型的变量后,就可以将函数赋值给该变量了:

//定义一个计算乘方的函数

func pow(#base : Int, #exponent : Int0 -> Int

{

var result = 1;

for i int 1...exponent

{

result *= exponent

}

return result

}

//将pow函数赋值给myFun变量,则myFun可以当成pow使用

myFun = pow

//使用myFun

print(myFun(base:3, exponent:4))

//定义一个计算矩形面积的函数

func area(#width : Int, #height : Int) -> Int

{

return width * height

}

//将area函数赋值给myFun,并使用myFun,

myFun = area

print(myFun(3, 4)//输出12

个人感觉就是函数别名。。。。。

3.通过使用函数类型的变量,可以让myFun在不同的时间指向不同的函数,从而让程序更加灵活。

4.使用函数类型作为形参类型;有时候需要定义一个函数,该函数的大部分计算逻辑都能确定,但某些处理逻辑暂时无法确定----这意味着某些代码需要动态改变,如果希望调用函数时能动态传入传入这些代码,这就需要在函数中定义函数类型的形参这样即可在调用该函数时传入不同的函数作为参数----函数类型的变量好像派上用场了。。。

5. Swift支持像使用其他类型一样使用函数类型,因此,可以在函数的形参列表中定义函数类型。举个栗子:

//在函数的形参列表中定义函数类型的形参,其中,形参名是fn,类型是(Int)->Int类型。

func map (var #data : [Int],#fu:(Int) -> Int0 -> Int

{

//遍历data数组中的元素,并用fn函数对每个元素进行计算,然后将计算结果作为新的数组元素

for var i=0, len=data.count; i

{

data[i] = fn(data[i])

}

}

//定义一个计算平方的函数

func square(val : Int) -> Int

{

return val * val

}

//定义一个计算立方的函数

funccube(val : Int) -> Int

{

return val * val * val

}

//定义一个计算阶乘的函数

func factorial(val : Int) -> Int

{

var resule = 1;

for index in 2...val

{

result *= index

}

return result

}

//data数组

var data = [3, 4, 9, 5, 8]

/下面程序3次调用map函数,每次调用时传入不同的函数

print(map(data : data, fn : square)) //输出【9,16,81,25,64】

print(map(data : data, fn ; cube)) //输出【27,64,729,125,512】

print(map(data : data, fn : factorial)) //输出【6,24,362880,120,40320】

不难看出,这种方式跟C语言中的函数指针很像。但是比C语言总的指针函数更加简单,易懂

6.使用函数类型作为返回值类型:在Swift中,可以将其他函数作为函数的返回值。举个栗子:

//定义一个计算平方的函数

func square(val : Int) -> Int

{

return val * val

}

//定义一个计算立方的函数

funccube(val : Int) -> Int

{

return val * val * val

}

//定义一个计算阶乘的函数

func factorial(val : Int) -> Int

{

var resule = 1;

for index in 2...val

{

result *= index

}

return result

}

//定义函数,该函数的返沪指类型为(Int) -> Int

func getMathFunx(#type : String) ->(Int) -> Int

{

switch(type)

{

case "square":

return square

case "cube":

return cube

default:

retun factorial

}

}

//调用函数getMathFunc后,该函数返回的是一个函数

var fun1 = getMathFunc(type : "square") //得到square函数

var fun2 = getMathFunc(type : "cube") //得到cube函数

var fun3 = getMathFunc(type : "other") //得到factorial函数

四.函数重载

1.同java中一样,Swift支持函数重载,只要函数的形参列表或者返回值类型不同就可以了。

2. Swift的特有特点:如果两个函数除了外部形参名不同,其他的都相同,系统也会把它们当作重载函数。

3.大部分时候并不推荐使用形参个数可变的方式进行函数重载,因为这样没有意义。

相关文章

  • 每天学一点Swift----函数(二)

    三.函数类型 1. Swift的每个函数都有类型的,函数类型由函数的形参列表,返回值类型组成。 2.使用函数类型定...

  • 每天学一点Swift----函数(一)

    1. Swift中支持嵌套函数。 2.与函数紧密相关的另一个概念是闭包,闭包的本质是匿名函数,闭包可以作为表达式,...

  • 每天学一点Swift----集合(二)

    三.字典:字典中以key-value的形式保存数据,所以同一个字典中key不能重复。 1.声明字典--两种方式 (...

  • 每天学一点Swift---- 运算符函数

    一.运算符重载 1. Swift的运算符提供了良好的可扩展性,Swift不仅允许开发者重新定义已有的运算符(运算符...

  • 每天学一点Swift----闭包(二)

    七.闭包表达式 1.调用闭包(使用闭包返回值):闭包的本质是功能更加灵活的代码块,因此完全可以将闭包赋值给变量(联...

  • 每天学一点Swift----泛型(二)

    四.类型约束 1.虽然程序可以对泛型形参传入任何类型,但有时候为泛型形参增加某种特定的约束也是必要的。就像字典,D...

  • 每天学一点Swift----面向对象上(二)

    三.类和结构体 1. Swift的类和结构体高度相似,无论在定义语法上还是在用法上。 2.结构体和类的主要区别是:...

  • 每天学一点Swift----面向对象下(二)

    二.类的构造和析构 1.通过集成后,子类中不仅有父类中的存储属性,还有子类自己的存储属性。子类中的所有存储属性都必...

  • 每天学一点Swift----可选类型

    一.可选和nil 1.在任何类型的后面紧跟?即可表示它是可选类型。可选类型的变量可以用来处理“值缺失”的情况。 2...

  • 每天学一点Swift----集合(一)

    1. Swift的集合是一种特别有用的工具。Swift提供了数组和字典两种集合类型来存储集合数据。数组用于按顺序存...

网友评论

      本文标题:每天学一点Swift----函数(二)

      本文链接:https://www.haomeiwen.com/subject/jcxuxxtx.html