swift 之 函数
2015-10-24 09:53
316 查看
swift的函数跟
从参数个数来看
无参数
单参数
多参数
从返回值来看
无返回值
单个返回值
多值返回
从参数名称来看
函数参数都有一个外部参数名(external parameter name)和一个本地参数名(local parameter name)。
第一个参数省略其外部参数名,第二个以后的参数使用其本地参数名作为自己的外部参数名。所有参数需要有不同的本地参数名,但
使用外部函数名可以使得函数可以用一句话表达清楚,并且使得函数体内部可读,能表达出函数的明确意图。
忽略外部参数名
如果如下:
那么如何实现 直接调用
默认参数
将带有默认值的参数放在
可变参数
变量参数
就是在函数体内可以改变这个参数的值,默认我们都知道 参数值是个let
对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中。
输入输出参数
上面的可变参数仅仅是对函数体内可变,但如何使得一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在。那么就有了 In-Out 参数,这个有点像C++的引用。
你只能将变量作为
输入输出参数
函数类型的使用跟普通类型的使用方法相同,可作为参数类型,也可以是返回类型
函数可以嵌套
对于函数,也许还有些其他的东西,比如自定义操作符,重载,还有泛型,还有一块
脚本语言有很多神似之处。 如果有一天用swift开发服务器 ,很期待哇(一切皆有可能,毕竟人家说要跑在Linux上),😄
从参数个数来看
无参数
func myFunc()->Int{ }
单参数
func myFunc(first:Int)->Int{ }
多参数
func myFunc(first:Int, other:Int)->Int{ }
从返回值来看
无返回值
func myFunc(){ }
单个返回值
func myFunc()->Bool{ }
多值返回
func myFunc()->(min:Int, max:Int)
元组的成员不需要在函数中返回时命名,因为它们的名字已经在函数返回类型中有了定义
var ret = myFunc() print("min:\(ret.min), max:\(ret.max)")
从参数名称来看
函数参数都有一个外部参数名(external parameter name)和一个本地参数名(local parameter name)。
第一个参数省略其外部参数名,第二个以后的参数使用其本地参数名作为自己的外部参数名。所有参数需要有不同的本地参数名,但
可以共享相同的外部参数名。
func myFunc(first:Int, first A:Int, first B:Int){ } // 但是这么写外部参数名真的好么? myFunc(12, first: 1, first: 3);
使用外部函数名可以使得函数可以用一句话表达清楚,并且使得函数体内部可读,能表达出函数的明确意图。
忽略外部参数名
如果如下:
func myFunc( first:Int, A:Int)->Int{ return 10 } myFunc(12, A: 1) // 这样A,B 也是外部参数名
那么如何实现 直接调用
myFunc(12,1)这样的函数调用呢?
func myFunc(first:Int, _ A:Int)->Int{ return 10 } myFunc(12,1) // OK
默认参数
func myFunc(parameter: Int = 12)->Int{ return parameter } myFunc() //
将带有默认值的参数放在
函数参数列表的最后。这样可以保证在函数调用时,非默认参数的顺序是一致的,同时使得相同的函数在不同情况下调用时显得更为清晰。
可变参数
可变参数可以接受0个或者多个值
func myFunc(par:Double ...)->Double{ var total:Double = 0 for number in par { total += number } return total } myFunc(1,2,3,4,5) myFunc(1,5,8.9)
一个函数最多只能有一个可变参数如果函数有一个或多个带默认值的参数,而且还有一个可变参数,那么把可变参数放在参数表的最后
func myFunc(a:Double = 10, par:Double ... )->Double{ var total:Double = a for number in par { total += number } return total } myFunc(par: 1,2,3,4) // 20 myFunc(14, par: 1,2,3,4) // 24
变量参数
就是在函数体内可以改变这个参数的值,默认我们都知道 参数值是个let
var str = "Hello, playground" func myFunc(var str:String)-> String{ str = "@"+str return str } myFunc(str)
对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中。
输入输出参数
上面的可变参数仅仅是对函数体内可变,但如何使得一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在。那么就有了 In-Out 参数,这个有点像C++的引用。
你只能将变量作为
输入输出参数。你不能传入
常量或者字面量(literal value),因为这些量是
不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加
&符,表示这个值可以被函数修改。
输入输出参数
不能有默认值,而且
可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记。
func swap(inout a:Int, inout _ b:Int){ let tmp = a a = b b = tmp } var a = 3 // not let a = 3 var b = 107 //swap(3, 107) error swap(&a, &b)
函数类型(Function Types)
()->Void (Int, Int)->(Int, Int) //...
函数类型的使用跟普通类型的使用方法相同,可作为参数类型,也可以是返回类型
函数可以嵌套
func myFunc(a: Int, b:Int)->(Int)->Int{ func addAB(a:Int, _ b:Int)->Int{ return a + b; } func retFunc(a:Int)->Int{ return addAB(a , b) * b } return retFunc } (myFunc(3, b: 4))(3)
对于函数,也许还有些其他的东西,比如自定义操作符,重载,还有泛型,还有一块
函数式编程(我之前的文章也有相关介绍,对于这块我还是相当感兴趣的)。这类的知识我会慢慢补上的,哈哈,大家一起学习,有问题的地方请帮我指出。
相关文章推荐
- 关于 Swift 中的 Array.contains 方法
- SwiftCafe 咖啡时光 - 了解 Swift 中的闭包
- iOS巅峰之Swift结构体和类, 枚举, 构造器, 继承, 协议, 扩展(完结篇)
- iOS巅峰之Swift 函数, 闭包详解(下)
- ios深度解析之Swift(枚举,继承,协议,扩展)
- ios深度解析之Swift(结构体和类,属性)
- ios深度解析之Swift(函数)
- swift:创建表格UITableView
- iOS经典讲解之Swift匿名函数(闭包)(二)
- Swift基础知识
- Swift高级开发语言--结构体,类,构造器,属性
- Swift 基础语法 <与 OC作对比>
- Swift高级开发语言--枚举,继承,协议,扩展
- iOS经典讲解之Swift函数详解(一)
- 4.Swift初探-2048小游戏中的问题
- IOS开发:swift 语言基本语法1
- swift:入门知识之泛型
- Swift 语言概览
- swift:入门知识之协议与扩展
- swift:入门知识之枚举和结构体