博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift新手教程系列5-函数+selector在swift中的使用方法
阅读量:6853 次
发布时间:2019-06-26

本文共 3784 字,大约阅读时间需要 12 分钟。

原创blog。转载请注明出处

近期在用swift写代码,尽管遇到一些问题,可是代码量确实减了不少。

swfit新手教程系列会随着我使用swfit中的积累,不断地去修正更新

之前的教程

在swift中,函数有keywordfunc声明
格式
func 函数名(參数1,參数2,...)->返回值{
}
func firstFunction()->Int{	var result = 4	return 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//Wrong	println(toPrint)}func hwcPrint(var toPrint:Int){	toPrint = toPrint+1//Right	println(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}

转载于:https://www.cnblogs.com/yutingliuyl/p/6850390.html

你可能感兴趣的文章
java电子商务系统源码 Spring MVC+mybatis+spring cloud+spring boot+spring security
查看>>
Java 实现 给Excel模板赋值(直接打开表格赋值或者用自定义了名称的单元格(一块区域)赋值)...
查看>>
DataLakeAnalytics: 解析IP地址对应的国家城市地址的能力
查看>>
20181120上课截图
查看>>
FastReport教程:如何从命令行使用报表设计器和查看器
查看>>
sed命令详解及运用
查看>>
一篇文章让你全部看懂!内存-java模型-jvm结构
查看>>
[转] Valgrind使用
查看>>
0023-HOSTS配置问题导致集群异常故障分析
查看>>
《软件开发工具》要点
查看>>
iOS开发 图形变换-做一个正方体
查看>>
jhead命令详解
查看>>
OC中initialize方法和init方法的区别
查看>>
一些不可思议的小问题
查看>>
界面间传值
查看>>
3.vsphere client的安装
查看>>
Linux实现最常用的磁盘阵列-- RAID5
查看>>
简单的菜单 menu
查看>>
Intellij Idea 2017创建非Maven web项目使用tomcat部署实战
查看>>
工程DHCP配置
查看>>