Swift入门教程系列5-函数+selector在swift中的用法
来源:互联网 发布:openwrt php 编辑:程序博客网 时间:2024/05/04 09:18
原创blog,转载请注明出处
格式
func 函数名(参数1,参数2,...)->返回值{
}
在Swift中,函数可以有任意类型的参数,因为Swift定义函数本身是一种类型,所以函数本身也可以返回
函数,或者一个函数作为另一个函数的参数
一、常见的使用函数方式
1、无参数,返回值为空
没有返回值的时候->可以省略
2、多个参数,返回值唯一
3、多个参数,多个返回值
在Swift中,多个返回值常用元组来返回
二、外部参数
从上面的例子中,我们发现,使用的时候我们并没有看到参数的信息,就是我们并不知道第一个参数是什
么意思,第二个参数是什么意思。外部参数可以完美解决这个问题
我们来举个例子
比如输入WenchenHuang Male则返回WenchenHuang:Male.
但是,由于没有提示信息,我并不知道第一个参数是代表名字,第二个参数代表性别,这时候可以用外部
参数
调用的时候一目了然,知道哪一个参数代表什么意思
但是这样写仍然比较麻烦,我们不得不为同一个参数提供内部和外部两个名字
Swift为我们提供了一种简写外部参数的方式
只需要在内部参数前加上前缀,内部参数在调用的时候会体现
三、默认参数与变量参数
默认参数就是对参数有个默认值,在函数调用的时候,可以给这个参数传值,也可以不传,不传的时候使
用默认值
举个简单的例子
调用的时候
这是swift的一个特点:默认参数生成一个外部参数名称
在swift中,函数传入的参数本身是常量,在函数中不能改变,如果想要让该参数作为可修改的副本,则添
加var
注意:一个函数最多只能有一个可变参数,且必须为最后一个,为了减少内容歧义
例如:
四、可变参数
所谓可变参数,就是想很多脚本语言那样,参数个数不明确,而在函数体内部,参数保存在一个数组里
可变参数用...表示
举个例子
五、输入输出参数inout
六、函数类型
前面提到过,在swift中函数本身就是一个类型,类似于C语言中的函数指针
BTW:函数类型的理解对后面闭包的理解很重要
例如:上面的函数func addOne(input:Int)
函数类型就是(Int)->()
所以,我们可以像其他类型一样使用函数类型
var add:(Int,Int)->Int 声明一个入口参数是Int,Int返回值是Int的函数类型变量add
同样,函数类型也可以作为参数传递给函数
函数类型也可以作为返回值
这里采用Apple官方文档里的说明:
七、函数嵌套
何为函数嵌套,就是在函数里定义函数,默认嵌套的函数对外不可见,但是可在函数内部调用。
对上面函数进行重写
八、Selector
在swift中,建议不在使用selector,因为其不是类型安全的。但是对于熟悉Objective-C的程序员同学来说,很多方法讲不能调用,对此,swift对objective-C的selector直接传入函数名
最近在用swift写代码,虽然遇到一些问题,但是代码量确实减了不少。
swfit入门教程系列会随着我使用swfit中的积累,不断地去修正更新
之前的教程
swift单例模式详解-线程安全,多核性能
swift入门教程4-集合(Array,Dictionary)
swift入门教程3-字符串String
swift入门教程2-运算符
swift入门教程1-准备知识
在swift中,函数有关键字func声明格式
func 函数名(参数1,参数2,...)->返回值{
}
func firstFunction()->Int{var result = 4return result}println(firstFunction())//调用参数为空,返回值为Int
在Swift中,函数可以有任意类型的参数,因为Swift定义函数本身是一种类型,所以函数本身也可以返回
函数,或者一个函数作为另一个函数的参数
一、常见的使用函数方式
1、无参数,返回值为空
没有返回值的时候->可以省略
func hwcFunction(){println("Hello hwc")}
2、多个参数,返回值唯一
func hwcFunction(first:String,second:String)->String{return first+second}println(hwcFunction("hello","hwc"))
3、多个参数,多个返回值
在Swift中,多个返回值常用元组来返回
func hwcSwapString(first:String,second:String)->(String,String){return (second,first)}var (second,first) = hwcSwapString("first","second")
二、外部参数
从上面的例子中,我们发现,使用的时候我们并没有看到参数的信息,就是我们并不知道第一个参数是什
么意思,第二个参数是什么意思。外部参数可以完美解决这个问题
我们来举个例子
func addPersonalInformation(Name:String,Sex:String)->String{return Name+":"+Sex}addPersonalInformation("WenchenHuang","Male")
比如输入WenchenHuang Male则返回WenchenHuang:Male.
但是,由于没有提示信息,我并不知道第一个参数是代表名字,第二个参数代表性别,这时候可以用外部
参数
func addPersonalInformation(name Name:String,sex Sex:String)->String{return Name+":"+Sex}addPersonalInformation(name:"WenchenHuang",sex:"Male")
调用的时候一目了然,知道哪一个参数代表什么意思
但是这样写仍然比较麻烦,我们不得不为同一个参数提供内部和外部两个名字
Swift为我们提供了一种简写外部参数的方式
只需要在内部参数前加上前缀,内部参数在调用的时候会体现
func addPersonalInformation(#name:String,#sex:String)->String{return name+":"+sex}addPersonalInformation(name:"WenchenHuang",sex:"Male")
三、默认参数与变量参数
默认参数就是对参数有个默认值,在函数调用的时候,可以给这个参数传值,也可以不传,不传的时候使
用默认值
举个简单的例子
func hwcPrint(toPrint:Int = 10){println(toPrint)}
调用的时候
hwcPrint()//输出10hwcPrint(toPrint:11)//输出11这里,我们不难看出,在调用的时候swift自动为我们生成了一个外部参数的名称
这是swift的一个特点:默认参数生成一个外部参数名称
可以使用下划线作为默认参数的外币名称,这样swfit不会提供外部参数名称,但不建议这么做
在swift中,函数传入的参数本身是常量,在函数中不能改变,如果想要让该参数作为可修改的副本,则添
加var
注意:一个函数最多只能有一个可变参数,且必须为最后一个,为了减少内容歧义
例如:
func hwcPrint(toPrint:Int){toPrint = toPrint+1//Wrongprintln(toPrint)}func hwcPrint(var toPrint:Int){toPrint = toPrint+1//Rightprintln(toPrint)}
四、可变参数
所谓可变参数,就是想很多脚本语言那样,参数个数不明确,而在函数体内部,参数保存在一个数组里
可变参数用...表示
举个例子
func addMultiString(toPrint:String...)->String{var resultString:String = ""for tempString in toPrint{ resultString+=tempString}return resultString}var result1 = addMultiString("hello","world")var result2 = addMultiString("Wen","chen","Huang")
五、输入输出参数inout
这类参数传入原值得引用,函数内对传入参数的操作会改变原始值,传入引用的时候需要使用&
func addOne(inout input:Int){++input}var test1 = 10addOne(&test1)//test1 = 11func addOne(var input:Int){++input}var test2 = 10addOne(test3)//test2 = 10
六、函数类型
前面提到过,在swift中函数本身就是一个类型,类似于C语言中的函数指针
BTW:函数类型的理解对后面闭包的理解很重要
例如:上面的函数func addOne(input:Int)
函数类型就是(Int)->()
所以,我们可以像其他类型一样使用函数类型
var add:(Int,Int)->Int 声明一个入口参数是Int,Int返回值是Int的函数类型变量add
同样,函数类型也可以作为参数传递给函数
func addThree(addTwo:(Int,Int)->Int,thrid:Int)->Int{return addTwo+thrid}
函数类型也可以作为返回值
这里采用Apple官方文档里的说明:
func stepForward(input: Int) -> Int {return input + 1} func stepBackward(input: Int) -> Int {return input - 1}func chooseStepFunction(backwards: Bool) -> (Int) -> Int {return backwards ? stepBackward : stepForward}let moveNearerToZero = chooseStepFunction(currentValue > 0)
七、函数嵌套
何为函数嵌套,就是在函数里定义函数,默认嵌套的函数对外不可见,但是可在函数内部调用。
对上面函数进行重写
func chooseStepFunction(backwards: Bool) -> (Int) -> Int {func stepForward(input: Int) -> Int {return input + 1} func stepBackward(input: Int) -> Int {return input - 1}return backwards ? stepBackward : stepForward}
八、Selector
在swift中,建议不在使用selector,因为其不是类型安全的。但是对于熟悉Objective-C的程序员同学来说,很多方法讲不能调用,对此,swift对objective-C的selector直接传入函数名
myButton.addTarget(self, action: "buttonTapped:", forControlEvents: .TouchUpInside)let timer = NSTimer(timeInterval: 1, target: self, selector: "test", userInfo: nil, repeats: false)func test{//Do something}function buttonTapped(sendr:AnyObject){//Do something}
13 1
- Swift入门教程系列5-函数+selector在swift中的用法
- swift中的selector
- swift 中的 Selector 类型
- UIAlertController在Swift中的用法
- Swift中Selector的用法
- Swift入门教程系列8-枚举
- Swift Selector
- swift 中的KVO用法
- Swift视频教程:Swift入门教程
- Swift 入门教程
- Swift入门教程
- 如何在Swift中使用SELECTOR
- Swift入门教程系列6-闭包
- swift入门教程系列7-控制流
- Swift中的标准函数
- Swift中的函数
- Swift中的floor()函数
- 9. Swift 中的函数
- Linux指令笔记12
- Python学习 - 编写自己的ORM(1)
- Linux指令笔记13
- Codeforces 3 B. Lorry 暴力 排序 枚举 贪心
- IOS开发:键盘弹出调用的方法顺序
- Swift入门教程系列5-函数+selector在swift中的用法
- Viewpager PageTranformer的使用和炫酷动画的实现
- smarty入门教程三-------Smarty引擎的工作原理
- java实验三 实验报告代码
- 黑马程序员-.NET基础之多线程
- 双网卡配置
- NYOJ 330 一个简单的数学题【数学题】
- 【线段树】 SPOJ 1716 Can you answer these queries III
- 启动tomcat时报Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 的解决方案