Swift新手教程系列5-函数+selector在swift中的使用方法
原创blog。转载请注明出处
近期在用swift写代码,尽管遇到一些问题,可是代码量确实减了不少。
swfit新手教程系列会随着我使用swfit中的积累,不断地去修正更新
之前的教程
swift新手教程4-集合(Array,Dictionary)
在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()//输出10
hwcPrint(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 = 10
addOne(&test1)//test1 = 11
func addOne(var input:Int){
++input
}
var test2 = 10
addOne(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
}
Swift新手教程系列5-函数+selector在swift中的使用方法的更多相关文章
- 智能合约语言 Solidity 教程系列3 - 函数类型
Solidity 教程系列第三篇 - Solidity 函数类型介绍. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以 ...
- 3.Swift翻译教程系列——Swift基础知识
英语PDF下载链接http://download.csdn.net/detail/tsingheng/7480427 Swift是用来开发iOS和OS X应用的新语言,可是很多地方用起来跟C或者OC是 ...
- 【JS新手教程】JS获取当前星期几的几种方法
该文通过获取星期几的几种方法,介绍JS里的数组,判断,和字符串截取,可以当作新手教程看,小白也看的懂.获取星期几,可通过Date()对象的getDay()获取,获取的是一个数字,对应的是0,1,2,3 ...
- Swift新手教程3-字符串String
原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.用法和C语言类似. 注意 在Cocoa和Cocoa touch中,Swift的String,和Fo ...
- 7.Swift翻译教程系列——控制循环的流程
英语PDF下载链接http://download.csdn.net/detail/tsingheng/7480427 Swift提供了类C语言类似的控制流结构.包含for循环和while循环来多次运行 ...
- ios新开发语言swift 新手教程
http://gashero.iteye.com/blog/2075324 视频教程:http://edu.51cto.com/lesson/id-26464.html
- Swift新手教程12-可选链
可选链 原创Blog,转载请注明出处 我的博客地址 http://blog.csdn.net/hello_hwc 可选链提供一个一种可选的方式訪问对象的属性.方法.下标脚本,可选链的返回值一定是可选类 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在Web Api中,我们对资源的CRUD操作都是通过相应的Http方法来实现——Post(新 ...
- 将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法
public static function objectToArray($d) { if (is_object($d)) { $d = get_object_vars($d); } if (is_a ...
随机推荐
- python 实现代理服务器
# encoding:utf-8 import socket import thread import re def getAddr(d): a = re.search("Host: (.* ...
- 字符串匹配算法之BM算法
BM算法,全称是Boyer-Moore算法,1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法. BM算法定义了两个规则: ...
- 性能测试培训day1
测试本质: 1构造测试数据和期望结果 2执行 3验证 自动化测试: 写完代码,单元测试测代码逻辑,单元测试搞清楚代码逻辑就行了(白盒测试)先静态,运行前用工具扫描BUG例如(a==11写成a=11), ...
- Win2008 Server MySql安装包详细安装教程
首先去官网下载 下载MySql 下载地址:http://downloads.mysql.com/archives/community/ 我这里选择MSI的32位安装包安装,服务器系统32位的. 安装M ...
- 后端传前端数据乱码(返回json字符串到前端)
中文乱码的问题,在开发过程中难免会遇到,而在配置好编码之后,不管是数据库,还是其他地方都配置好统一UTF-8编码之后,后端从数据库取出数据传回前端,还会乱码,这里以ssm框架为例,因为是我自己遇到的, ...
- Vertex&Frag
一.Vertex&Frag 包含Vertex&Fragment 的Shader叫做顶点&像素着色器,在Vertex的功能函数中,我们侧重于几何计算,如纹理坐标,顶点坐标等:在F ...
- Analyzer原理
[常用分词器] SimpleAnalyzer StopAnalyzer WhitespaceAnalyzer StandardAnalyze [TokenStream] she is a studen ...
- C++ stringstream的用法
Created at stringstream的用法 使用stringstream对象简化类型转换 C++标准库中的<sstream>提供了比ANSI C的<stdio.h&g ...
- NYOJ-768移位密码,最简单的代替密码;
移位密码 时间限制:1000 ms | 内存限制:65535 KB 难度:0 -> Link <- 还有1个半小时考信息安全导论,昨晚心血来潮在oj上看到这几个题,简直就是水啊 ...
- Django组件:(6)cookie 和 session
会话:会话可理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应:在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的 ...