Swift新手教程系列5-函数+selector在swift中的使用方法

原创blog。转载请注明出处

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

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

之前的教程

swift单例模式具体解释-线程安全,多核性能

swift新手教程4-集合(Array,Dictionary)

swift新手教程3-字符串String

swift新手教程2-运算符

swift新手教程1-准备知识

在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
}
时间: 2024-12-26 09:47:14

Swift新手教程系列5-函数+selector在swift中的使用方法的相关文章

智能合约语言 Solidity 教程系列3 - 函数类型

Solidity 教程系列第三篇 - Solidity 函数类型介绍.Solidity 系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 本文前半部分是参考Solidity 官方文档(当前最新版本:0.4.20)进行翻译,后半部分函数可见性( public, external, internal, privite )深度分析. 函数类型(Function T

OSG for Android新手教程系列(二)——项目配置

在上一篇教程中,主要介绍了如何把OSG源代码编译成为能够在Android项目下使用的函数库.在这一篇教程中,我将针对如何在自己的Android项目中配置OSG函数库进行详细讲解. 现阶段网上关于OSGfor Android的配置方式教程有很多,但是大部分在实际使用起来都会或多或少的出现一些问题,无法完全照搬,需要一定的修改.而且,对于配置中的那些变量的具体含义,也很少有人能够进行仔细的讲解.这非常不利于新手的学习和理解,往往会造成出现bug后面对满屏幕的错误log完全一脸茫然的情况. 所以我将在

7.Swift翻译教程系列——控制循环的流程

英语PDF下载链接http://download.csdn.net/detail/tsingheng/7480427 Swift提供了类C语言类似的控制流结构.包含for循环和while循环来多次运行任务,if和switch语句依据不同的条件运行不同的分支代码,break和continue语句将运行流程跳转到其它语句. 除了C里面传统的for-条件-递增循环.Swift还添加了for-in循环使得遍历数组.字典,范围,字符串或者其它序列都非常easy. Swift的switch语句也要比C语言的

Swift新手教程3-字符串String

原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.用法和C语言类似. 注意 在Cocoa和Cocoa touch中,Swift的String,和Foundation中的NSString是兼容的,全部NSString额API都能够调用String类型 字符串常量 1.含转义字符:比如\n,\t等 2.单字节Unicode标量,\xmm 3.双字节Unicode标量,\ummmm 4.四字节Unicode标量,\Ummmmmmmm 这里的m为十六进制数

Swift学习—教程学习五 函数(function)

5 函数(Functions) 函数是用来完成特定任务的独立的代码块. 5.1 定义与调用Defining and Calling Functions 函数名(参数列表)->返回值 { 函数体(要干什么) } 函数名用来描述其要完成的任务,调用函数时要向函数传递其要求的输入参数,参数顺序必须与函数参数列表一致. func greet(person: String) -> String { let greeting = "Hello, " + person + "!

swift入门教程系列7-控制流

控制流 总的来说使用方式和C,C++,Objective C等差不多 这里讲解可能会少一点,大家实际写点代码就会用了,很简单,可以侧重看看switch,swift中的swift功能更多一些 有一点特别要注意的是,swift中的条件表达式的结果一定是Bool类型的 也就是说 var a  = 19 if a{ } 这样的表达式是不对的,因为a是Int类型 1.if 常用的if也就三种 if bool{ } if bool{ } else{ } if bool{ } else if{ } else{

Swift新手教程12-可选链

可选链 原创Blog,转载请注明出处 我的博客地址 http://blog.csdn.net/hello_hwc 可选链提供一个一种可选的方式訪问对象的属性.方法.下标脚本,可选链的返回值一定是可选类型. 长处:替代强制解析(符号!,比如instance.location!.y),由于强制解析nil的值会导致执行期错误 我的心得:对一个链式调用,比方instance.Frame.Origin.x等非常长的调用,对可能是nil的部分加上? 比如,frame和Origin可能为nil.则这么使用in

Swift基础教程(第一课 第一个Swift应用)

从LaunchPad中启动Xcode6,选择"create new project": 可以看到,Swift语言的项目与Objective-C的项目基本上是一样的,除了.m结尾的Objective-C源码换成了.swift结尾的Swift语言源文件了. 2 . Xcode 6在Storyboard里为iPad和iPhone增加了统一的界面管理功能,和AutoLayou一起工作.为了简单起见,先禁用AutoLayout. 禁用AutoLayout时会弹出对话框选择是iPhone还是iPa

将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法

public static function objectToArray($d) { if (is_object($d)) { $d = get_object_vars($d); } if (is_array($d)) { return array_map(array(__CLASS__, __FUNCTION__), $d); } else { return $d; } } array_map(array(__CLASS__, __FUNCTION__), $d)解释: 我们可以在PHP手册中