2016-07-13(Swift-函数)

函数的概念:

函数是执行特定任务的代码自包含块。给定一个函数名称标识, 当执行其任务时就可以用这个标识来进行"调用"。

swift函数参数提供默认值,以简化函数调用,并通过设置在输入输出参数,在函数执行完成时修改传递的变量。

函数的声明、实现、调用:

语法:

func(函数声明关键字) 函数名(参数名称:参数数据类型,...)-> 返回数据类型{函数体}

注意:声明语法(若没返回值,->开始可以省略,没有参数,括号放空即可)

func sum(num1:Double,num2:Double)->Double
{    
return num1 + num2
}
print(sum(10.5, num2: 20))

输出结果:
30.5

//无返回值
func  fun (name:String)
{
if name .isEmpty
{
    print("空字符串")
}
else
{
    print("不是空字符串\(name)")
}
}
fun("张三") //调用函数

在swift中没有单独的函数声明,直接实现即可.

注意:在swift中函数调用要在实现之后,参数的传递个数类型匹配,有返回值要处理.

课堂练习:

自定义函数,实现给个值求阶乘,返回值输出。

//给一个值,求阶乘
func jiecheng(num:Double)->Double
{    
    var jiecheng:Double = 1    
for var i:Double = 1 ; i <= num ; i++    
{        
    jiecheng = jiecheng * i   
}       
return jiecheng
}
print(jiecheng(5))

输出:
120.0
Program ended with exit code: 0


自定义函数,求一个数的绝对值,返回并输出结果。

//求一个数的绝对值
func jueduizhi(var num:Double)->Double
{    
    if num < 0    
{        
    num = -num    
}    
return num
}
print(jueduizhi(-9))

输出:
9.0
Program ended with exit code: 0



函数的参数:

函数的参数名有两种:内部参数名,外部参数名

内部参数名:即函数内部使用的参数名称

外部参数名:即函数在调用的时候的参数描述
例如:

//求一个数的绝对值absNum:外部参数  num:内部参数
func  absFun (absNum num:Double)->Double
{
   if num > 0 {  return num   }
    return -num
}
//absNum:外部参数,描述参数的意义
print(absFun(absNum: 100))

函数的参数默认值:

/**
 字符串拼接(str1拼接到str2后面)
 - parameterstr1: 字符串1
 - parameterstr2: str2给了默认一个空格的值
 - returns: 拼接结果
 */
func joinStr (string str1:String,belowString str2:String = ":")->String
{
    return  "姓名" + str2 + str1
}
//有默认值,调用的时候可以不填写,外部参数也不要写
print(joinStr(string: "张三"))

这里的参数“str2”若调用时不进行赋值,则为默认值“:”,若要修改默认值可:

print(joinStr(string: "张三",str2: "="))

函数的参数在没有修饰符的情况下默认是let(只读),若在函数内部要修改参数值,则参数需要使用var。如下

//求一个数的绝对值absNum:外部参数  num:内部参数
func  absFun (var absNum num:Double)->Double
{
    if num < 0  {
        num = -num
    }
    return num
}
var num1:Double = -100
//absNum:外部参数,描述参数的意义
print(absFun(absNum: num1))
print(num1)

函数参数 - 可变参数:

一个可变参数的参数接受零个或多个指定类型的值。当函数被调用时,您可以使用一个可变参数的参数来指定该参数可以传递不同数量的输入值。写可变参数的参数时,需要参数的类型名称后加上点字符(...)。

示例:

/**
 求数学成绩平均值
 - parameter scores: 一组数学成绩(可变参数)
 - returns: 返回平均成绩
 */
func mathScoreAvg(scores: Double...) -> Double {
    var total: Double = 0
    for number in scores
    {
        total += number
    }
    return total / Double(scores.count)
}
print(mathScoreAvg(99,50.8,77,66.5,89))

函数参数 - 输入-输出参数:

前面所说的可变参数,只能在函数本身内改变。如果你想有一个函数来修改参数的值,并且想让这些变化要坚持在函数调用结束后,你可以定义输入-输出参数来代替。
通过在其参数定义的开始添加inout关键字写用来标明输入-输出参数。一个在输入-输出参数都有一个传递给函数的值,由函数修改后,并从函数返回来替换原来的值。

示例:求绝对值

//求一个数的绝对值absNum:外部参数  num:内部参数  inout:描述num是一个输入-输出参数
func  absFun (inout absNum num:Double)->Double
{
    if num < 0
    {
        num = -num
    }
    return num
}
var num1:Double = -100
//absNum:外部参数,描述参数的意义
print(absFun(absNum: &num1))//类似地址传参
print(num1)

函数类型:

在swift中每一个函数都有特定的函数类型,可以充当参数类型和函数的返回类型。

示例:

//加法函数
func sumTowInt(a:Int,b:Int)->Int
{
    return a + b
}
//乘法函数
func mutiplyTowInt(a:Int,b:Int)->Int
{
    return a * b
}
/** 带有函数参数的结果打印函数  
- parameter funTowInt: 函数参数 
- parameter a:         整形参数1 
- parameter b:         整形参数2 
*/
func printResult(funTowInt:(Int,Int)->Int,a:Int,b:Int)
{
    print(funTowInt(a,b))
}
//存储函数的变量
var funTemp:(Int,Int)->Int = sumTowInt //加法

printResult(funTemp, a: 10, b: 20)funTemp = mutiplyTowInt//乘法
printResult(funTemp, a: 10, b: 20)

输出:
10
30
Program ended with exit code: 0



函数嵌套:

本章中遇到函数都是全局函数,在全局范围内定义。其实你还可以在其他函数中定义函数,被称为嵌套函数。

嵌套函数默认对外界是隐藏的,但仍然可以调用和使用其内部的函数。内部函数也可以返回一个嵌套函数,允许在嵌套函数内的另一个范围内使用。

//--------------嵌套函数--------------
/**前进或者后退
- parameter choose: true:前进  false:后退
- returns: 返回一个函数有整形参数,并且返回一个整形数据的函数
*/
func chooseStepFunction(choose:Bool)->(Int)->Int
{
    //前进函数
    func stepForward(input:Int)->Int
    {
        return input + 1
    }
    //后退函数
    func stepBack(input:Int)->Int
    {
        return input - 1
    }
    return choose ? stepForward : stepBack //三目运算符
}
//函数变量
let f:(Int)->Int = chooseStepFunction(true)//前进
print(f(100))//内部函数调用
//声明函数变量并调用
print(chooseStepFunction(false)(100))//后退

输出:
10199
Program ended with exit code: 0



常见错误:

函数实现必须在调用之前,函数没有声明
函数实现的语法,参数语法,返回值语法
函数调用时注意参数严格一致,有返回值要处理
函数的参数没有指定修饰符,则为let不可变。
函数在适应输入输出参数时,是var类型 ,var不许要书写。
函数变量的声明,注意参数类型及返回值,语法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279

推荐阅读更多精彩内容

  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,276评论 1 5
  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 688评论 0 0
  • 函数是用来完成特定任务的独立的代码块。给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这...
    穷人家的孩纸阅读 790评论 2 1
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,066评论 9 118
  • 今天还是要听小女生的歌,不过这次是三个小女生。 一首很老的歌《不想长大》。 曾经我们是没有水晶鞋的灰姑娘,一次次听...
    乐非扬阅读 260评论 0 0