Swift心得笔记之函数讲解.docx
- 文档编号:2455406
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:12
- 大小:18.35KB
Swift心得笔记之函数讲解.docx
《Swift心得笔记之函数讲解.docx》由会员分享,可在线阅读,更多相关《Swift心得笔记之函数讲解.docx(12页珍藏版)》请在冰豆网上搜索。
Swift心得笔记之函数讲解
Swift心得笔记之函数
函数是执行特定任务的代码自包含块。
通过给定一个函数名称标识它是什么,并在需要的时候使用该名称来调用函数以执行任务。
今天我们就来探讨下swift中的函数问题。
参数
外部变量名
一般情况下你可以不指定外部变量名,直接调用函数:
复制代码代码如下:
funchelloWithName(name:
String,age:
Int,location:
String){
println("Hello\(name).Ilivein\(location)too.Whenisyour\(age+1)thbirthday?
")
}
helloWithName("Mr.Roboto",5,"SanFrancisco")
但是在类(或者结构、枚举)中的时候,会自动分配外部变量名(第一个除外),这时候如果还想直接调用就会报错了:
复制代码代码如下:
classMyFunClass{
funchelloWithName(name:
String,age:
Int,location:
String){
println("Hello\(name).Ilivein\(location)too.Whenisyour\(age+1)thbirthday?
")
}
}
letmyFunClass=MyFunClass()
myFunClass.helloWithName("Mr.Roboto",5,"SanFrancisco")
如果你怀念在OC中定义函数名的方式,可以继续这样定义,比如helloWithName这种,隐藏第一个函数的外部名:
复制代码代码如下:
classMyFunClass{
funchelloWithName(name:
String,age:
Int,location:
String){
println("Hello\(name).Ilivein\(location)too.Whenisyour\(age+1)thbirthday?
")
}
}
letmyFunClass=MyFunClass()
myFunClass.helloWithName("Mr.Roboto",age:
5,location:
"SanFrancisco")
如果你实在不想要外部变量名,那么可以用_来代替:
复制代码代码如下:
structCelsius{
vartemperatureInCelsius:
Double
init(fromFahrenheitfahrenheit:
Double){
temperatureInCelsius=(fahrenheit-32.0)/1.8
}
init(fromKelvinkelvin:
Double){
temperatureInCelsius=kelvin-273.15
}
init(_celsius:
Double){
temperatureInCelsius=celsius
}
}
letboilingPointOfWater=Celsius(fromFahrenheit:
212.0)
//boilingPointOfWater.temperatureInCelsius是100.0
letfreezingPointOfWater=Celsius(fromKelvin:
273.15)
//freezingPointOfWater.temperatureInCelsius是0.0
letbodyTemperature=Celsius(37.0)
//bodyTemperature.temperatureInCelsius是37.0
对外部参数名的娴熟应用可以极好的抽象初始化过程。
可以看看json-swiftlibrary中的应用。
默认参数值
可以在函数定义里写上函数的默认值,这样在调用的时候可以不传这个值:
复制代码代码如下:
funcadd(value1v1:
Int,value2p1:
Int=2)->Int{
returnv1+p1
}
add(value1:
2,value2:
4)//2+4
add(value1:
1)//1+2
如果你没有提供外部参数名,设置默认参数值会自动提供默认参数名。
可变参数
可变参数(VariadicParameters)可以接受一个以上的参数值。
比如计算平均数:
复制代码代码如下:
funcarithmeticMean(numbers:
Double...)->Double{
vartotal:
Double=0
fornumberinnumbers{//numbersis[Double]
total+=number
}
returntotal/Double(numbers.count)
}
arithmeticMean(1,2,3,4,5)
arithmeticMean(3,8,19)
如果不止一个参数,需要把可变参数放在最后,否则会报错。
应该这样:
复制代码代码如下:
funcsumAddValue(addValue:
Int=0,numbers:
Int...)->Int{
varsum=0
fornumberinnumbers{//numbers===[Int]
sum+=number+addValue
}
returnsum
}
sumAddValue(addValue:
2,2,4,5)//(2+2)+(4+2)+(5+2)=17
常量和变量参数
默认参数是常量,无法在函数体中改变参数值。
我们可以var一个新的值就行操作,也可以直接在函数定义中加上var避免在函数体中定义新的变量。
比如这一个右对齐函数:
复制代码代码如下:
funcalignRight(varstring:
String,count:
Int,pad:
Character)->String{
letamountToPad=count-countElements(string)
ifamountToPad<1{
returnstring
}
letpadString=String(pad)
for_in1...amountToPad{
string=padString+string
}
returnstring
}
letoriginalString="hello"
letpaddedString=alignRight(inalString,10,"-")//"-----hello"
输入输出参数(inout)
在函数体中对变量参数进行的修改并不会改变参数值本身,比如看这个例子:
复制代码代码如下:
funcadd(varv1:
Int)->Int{
return++v1
}
vara=1
add(a)//2
a//1
如果想通过函数修改原始值需要inout,但是这样是错误的:
复制代码代码如下:
funcadd(inoutv1:
Int)->Int{
return++v1
}
vara=1
add(a)//2
a//1
在传入的时候,需要加上&标记:
复制代码代码如下:
funcadd(inoutv1:
Int)->Int{
return++v1
}
vara=1
add(&a)//2
a//1
泛型参数类型
在此借用一下objc.io中的例子来演示泛型参数类型的使用:
复制代码代码如下:
//交换两个值的函数
funcvalueSwap
T,inoutvalue2:
T){
letoldValue1=value1
value1=value2
value2=oldValue1
}
varname1="Mr.Potato"
varname2="Mr.Roboto"
valueSwap(&name1,&name2)//交换字符串
name1//Mr.Roboto
name2//Mr.Potato
varnumber1=2
varnumber2=5
valueSwap(&number1,&number2)//交换数字
number1//5
number2//2
函数类型
在Swift中,函数翻身把歌唱,终于成了一等公民,和其他类型平起平坐。
变量
我们可以定义一个变量,这个变量的类型是函数类型:
复制代码代码如下:
funcaddTwoInts(a:
Int,b:
Int)->Int{
returna+b
}
letanotherMathFunction=addTwoInts
anotherMathFunction(1,2)//3
参数
函数既然是类型的一种,那么显然也是可以作为参数传递的:
复制代码代码如下:
funcaddTwoInts(a:
Int,b:
Int)->Int{
returna+b
}
funcprintMathResult(mathFunction:
(Int,Int)->Int,a:
Int,b:
Int){
println("Result:
\(mathFunction(a,b))")
}
printMathResult(addTwoInts,3,5)//将参数2和参数3作为参数传给参数1的函数
返回值
函数也是可以作为结果返回的。
比如返回的值是一个参数为Int返回值为Int的函数,就是这样定义:
funcfoo()->(Int)->Int。
可以看下面这个具体的例子:
复制代码代码如下:
funcstepForward(input:
Int)->Int{
returninput+1
}
funcstepBackward(input:
Int)->Int{
returninput-1
}
funcchooseStepFction(backwards:
Bool)->(Int)->Int{
returnbackwards?
stepBackward:
stepForward
}
varcurrentValue=3
letmoveN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Swift 心得 笔记 函数 讲解