iOS开发Swift篇—(七)函数(1)

一、函数的定义

(1)函数的定义格式

1 func 函数名(形参列表) -> 返回值类型  {
2     // 函数体...
3 
4 }

(2)形参列表的格式

形参名1: 形参类型1, 形参名2: 形参类型2, … 

(3)举例:计算2个整数的和

1 func sum(num1: Int, num2: Int) -> Int {
2     return num1 + num2
3 }

(4)没有返回值的函数

  如果函数没有返回值,有3种写法

 1 func 函数名(形参列表) -> Void {
 2     // 函数体...
 3 }
 4 
 5 func 函数名(形参列表) -> () {
 6     // 函数体...
 7 }
 8 
 9 func 函数名(形参列表) {
10  // 函数体...
11 }

(5)没有形参的函数

  一个函数如果没有形参,函数名后面的小括号也不能省略

1 func 函数名() -> Int {
2     // 函数体...
3 }

  上面的函数没有形参、返回值是Int类型

(6)返回元组的函数

一个函数也可以返回元组数据

1 func find(id: Int) -> (name: String, age: Int) {
2     if id > 0 {
3         return ("jack", 20)
4     } else {
5         return ("nobody", 0)
6     }
7 }
8 var people = find(2)
9 println("name=\(people.name), age=\(people.age)")

 

二、外部参数名

1.简单说明

一般情况下,通过形式参数的名字,就能推断出这个参数的含义和作用

1 func addStudent(name: String, age: Int, no: Int) {
2     println("添加学生:name=\(name),age=\(age),no=\(no)")
3 }

在函数内部一看参数名就知道这3个参数的作用

但是,形式参数是用在函数内部的,当调用函数时就看不见形参的名字,有可能导致以后会不太明白每个参数的含义

对于addStudent("jack", 20, 19)一眼望去,能猜出第1个参数"jack"是指姓名,后面的20、19分别代表什么含义?

为了解决上述问题,Swift提供了外部参数名语法

外部参数名可以在调用函数时提醒每个参数的含义

2.定义

外部参数名的定义格式如下:

1 func 函数名(外部参数名 形式参数名: 形式参数类型) -> 返回值类型  {
2       // 函数体...
3 }

外部参数名写在形式参数名的前面,与形式参数名之间用空格隔开

3.外部参数名的使用

1 func sum(number1 num1: Int, number2 num2: Int) -> Int
2 {
3     return num1 + num2
4 }
5 sum(number1: 10, number2: 20) // 调用函数

注意:一旦定义了外部参数名,在调用函数时就必须加上外部参数名

4.外部参数名的简写

使用#能简化外部参数名的定义

1 func sum(#num1 : Int, #num2 : Int)
2 {
3     return num1 + num2
4 }

第1行代码的意思:num1、num2既是形式参数名,又是外部参数名

// 调用函数  sum(num1: 10, num2: 20)

 

三、默认参数值

(1)可以在定义函数时,给形参指定一个默认值,调用函数时,就可以不用给这个形参传值

1 func addStudent(name: String, age: Int = 20) {
2     println("添加1个学生:name=\(name),age=\(age)")
3 }

addStudent("jack")

age参数有个默认值20,所以第4行调用函数时可以不传值给age参数

输出结果是:

添加1个学生:name=jackage=20

 

(2)带有默认参数值的形参,Swift会自动给它生成一个跟形参名相同的外部参数名

age: Int = 20相当于#age: Int = 20

因此,如果要传入age参数值时,只能这么调用

addStudent("jack", age: 25)

 

(3)在带有默认参数值的参数名前加个下划线 _ ,调用函数时就不用写外部参数名

1 func addStudent(name: String, _ age: Int = 20) {
2     println("添加1个学生:name=\(name),age=\(age)")
3 }
4 
5 addStudent("jack", 25)

 

四、常量和变量参数

默认情况下,函数的参数都是常量参数,不能在函数内部修改

1 func test(num: Int) {
2     num = 10
3 }
4 
5 func test(num: Int)参数相当于func test(let num: Int)

注意:第2行代码会报错

在有些情况下,可能需要在函数内部修改参数的值,这时需要定义变量参数

在参数名前面加个var即可

1 func test(var num : Int) {
2     num = 10  
3 }

// 编写函数在某个字符串的尾部拼接N个其他字符串

1 func append(var string: String, suffix: String, count: Int) -> String
2 {
3     for _ in 0..<count {
4         string += suffix
5     }
6     return string
7 }
8 append("jack", ".", 4) // 调用函数
9 // jack....

 

五、输入输出参数

1.什么是输入输出参数?

在C语言中,利用指针可以在函数内部修改外部变量的值

在Swift中,利用输入输出参数,也可以在函数内部修改外部变量的值

输入输出参数,顾名思义,能输入一个值进来,也可以输出一个值到外部

 

2.输入输出参数的定义

在参数名前面加个inout关键字即可

func swap(inout num1: Int, inout num2: Int) {

}

3.代码示例:写一个函数交换外部2个变量的值

1 func swap(inout num1: Int, inout num2: Int) {
2     let tempNum1 = num1
3     num1 = num2
4     num2 = tempNum1
5 }
6 var a = 20
7 var b = 10
8 swap(&a, &b) // 传入的参数前面必须加上&
9 // 执行完swap函数后,a的值是10,b的值是20

4.输入输出参数的使用注意

传递实参时,必须在实参的前面加上&

不能传入常量或者字面量(比如10)作为参数值(因为它们都不可改)

输入输出参数不能有默认值

输入输出参数不能是可变参数

输入输出参数不能再使用let、var修饰(inout和let、var不能共存)

 

输入输出参数的价值之一

  可以实现函数的多返回值(其实让函数返回元组类型,也能实现返回多个值)

转载于:https://www.cnblogs.com/zengshuilin/p/5766680.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用计算机管理员权限,教你电脑使用代码添加管理员权限的详细教程

我们在使用电脑运行某些软件的时候&#xff0c;可能需要用到管理员权限才能运行&#xff0c;通常来说直接点击右键就会有管理员权限&#xff0c;但最近有用户向小编反馈&#xff0c;在需要管理员权限的软件上点击右键没有看到管理员取得所有权&#xff0c;那么究竟该如何才能获…

activiti 5.22的demo运行

activiti 5.22的demo运行 从github上clon下来的activiti项目,运行demo项目activiti-webapp-explorer2时&#xff0c;在使用到流程设计工作区&#xff0c;选取activiti modeler作为设计器的时候报错。 从下面的报错信息中发现&#xff0c;请求路径http://localhost:8080/activit…

宣布JavaScript 2017状况调查

by Sacha Greif由Sacha Greif 宣布JavaScript 2017状况调查 (Announcing the State of JavaScript 2017 Survey) 让我们找出去年以来发生的变化&#xff01; (Let’s find out what’s changed since last year!) In a hurry? You can take the survey here.匆忙&#xff1f;…

内是不是半包围结构_轻钢别墅的体系结构

一、轻钢别墅介绍1、轻钢别墅的屋面系统轻钢别墅屋面系统是由屋架、结构OSB面板、防水层、轻型屋面瓦&#xff08;金属或沥青瓦&#xff09;组成的。轻钢结构的屋面&#xff0c;外观可以有多种组合。材料也有多种。在保障了防水这一技术的前提下&#xff0c;外观有了许多的选择…

JavaScript call()函数的应用

call([thisObj[,arg1[, arg2[, [,.argN]]]]]) call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序…

hive 去重 字符串_hive函数

Hive是建立在 Hadoop 上的数据仓库基础架构,定义了简单的类 SQL 查询语言(HQL)函数分类&#xff1a;简单内置函数&#xff1a;数学函数&#xff0c;字符函数&#xff0c;日期函数&#xff0c;条件函数&#xff0c;聚合函数。高级内置函数&#xff1a;行列转换函数&#xff0c;分…

python word

代码&#xff1a; 1 #codingutf-82 __author__ zhm3 from win32com import client as wc4 import os5 import time6 import random7 import MySQLdb8 import re9 def wordsToHtml(dir):10 #批量把文件夹的word文档转换成html文件11 #金山WPS调用&#xff0c;抢先版的用KWPS&a…

aws lambda_如何为AWS Lambda实施日志聚合

aws lambdaby Yan Cui崔燕 如何为AWS Lambda实施日志聚合 (How to implement log aggregation for AWS Lambda) During the execution of a Lambda function, whatever you write to stdout (for example, using console.log in Node.js) will be captured by Lambda and sent…

【Python3爬虫】为什么你的博客没人看呢?

我相信对于很多爱好和习惯写博客的人来说&#xff0c;如果自己的博客有很多人阅读和评论的话&#xff0c;自己会非常开心&#xff0c;但是你发现自己用心写的博客却没什么人看&#xff0c;多多少少会觉得有些伤心吧&#xff1f;我们今天就来看一下为什么你的博客没人看呢&#…

泰安高考2021成绩查询,泰安高考成绩查询入口2021

高考结束之后&#xff0c;为了方便大家进行高考成绩的查询&#xff0c;下面跟着出国留学网小编来一起看看“泰安高考成绩查询入口2021”&#xff0c;仅供参考&#xff0c;希望对大家有帮助。2021山东高考成绩查询时间及志愿填报时间根据山东2021年夏季高考须知&#xff0c;2021…

用GitHub Issue取代多说,是不是很厉害?

2019独角兽企业重金招聘Python工程师标准>>> 摘要: 别了&#xff0c;多说&#xff0c;拥抱Gitment。 2017年6月1日&#xff0c;多说正式下线&#xff0c;这多少让人感觉有些遗憾。在比较了多个博客评论系统&#xff0c;我最终选择了Gitment作为本站的博客评论系统&a…

mysql延时优化教程_Mysql优化之延迟索引和分页优化_MySQL

什么是延迟索引&#xff1f;使用索引查询出来数据&#xff0c;之后把查询结果和同一张表中数据进行连接查询&#xff0c;进而提高查询速度!分页是一个很常见功能&#xff0c;select ** from tableName limit ($page - 1 ) * $n ,$n通过一个存储过程插入10000条数据进行测试&…

【动态规划】Vijos P1313 金明的预算方案(NOIP2006提高组第二题)

题目链接&#xff1a; https://vijos.org/p/1313 题目大意&#xff1a; m(m<32000)金钱&#xff0c;n&#xff08;n<60&#xff09;个物品&#xff0c;花费vi&#xff0c;价值vi*ci,每个物品可能有不超过2个附件&#xff0c;附件没有附件。 题目思路&#xff1a; 【动态规…

计算机网络应用答题卡,2013-2014学年第2学期11级计算机网络技术毕业考试试卷

2013-2014学年第2学期11级《计算机网络技术》课程毕业考试试卷得分&#xff1a;一、单项选择题&#xff1a;(每题1分&#xff0c;共30分&#xff0c;答案必须写在后面的选择题答题卡内&#xff0c;否则不得分)1、计算机网络可以按网络的覆盖范围来划分&#xff0c;以下()不是按…

0622 - 如何坚守自己的价值观?

如果有人有着和自己迥异的价值观&#xff0c;且混得很好&#xff0c;且和自己是熟人&#xff0c;自己是不是要改变自己、向其学习&#xff1f; 比如&#xff0c;常说的「学习好的比学习差的打工」&#xff0c;那到底是要好好学习&#xff0c;还是提前混人脉、攒经验&#xff1f…

如何免费注册Coursera课程

One question I get asked all the time here at Class Central is: are Coursera courses really free?在班级中心&#xff0c;我一直被问到的一个问题是&#xff1a; Coursera课程真的免费吗&#xff1f; Coursera’s user interface is intentionally designed to push le…

三态门有一个信号控制端en_三态门verilog

双向口-三态门的电路IC专业技术文章2008-12-06 14:59:24阅读119评论0字号&#xff1a;大中小订阅1.TTL三态门电路工作原理:三态门电路的基本结构如下图所示&#xff1a;(1)图1给出了三态门的电路结构图及图形符号。其中控制端EN为低电平时,P点为高电平&#xff0c;二极管D截止&…

[树形dp] Jzoj P3914 人品问题

Description 网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去&#xff0c;系统将自动输出你的人品指数。yzx不相信自己的人品为0。经过了许多研究后&#xff0c;yzx得出了一个更为科学的人品计算方法。这种方法的理论依据是一个非常重要的结论&#xff…

为什么那些每三年跳一次槽的人越跳越好? - 震撼

现在&#xff0c;人们已经放下了对跳槽的偏见。这是一件好事。之前。假设你每几年换一次工作&#xff0c;人们会认为你的简历上有 “污点”。面试官会认为你无法胜任一份工作。与同事相处不好。或者你对公司不忠诚&#xff0c;不能承担任务&#xff0c;等等。 这样的想法非常快…

2019 6月编程语言_六月开始提供435项免费在线编程和计算机科学课程

2019 6月编程语言Five years ago, universities like MIT and Stanford first opened up free online courses to the public. Today, more than 700 schools around the world have created thousands of free online courses.五年前&#xff0c;麻省理工学院和斯坦福大学等大…