iOS开发Swift篇—(七)函数(1)
iOS开发Swift篇—(七)函数
一、函数的定义
(1)函数的定义格式
func 函数名(形参列表) -> 返回值类型 {
// 函数体...
}
(2)形参列表的格式
形参名1: 形参类型1, 形参名2: 形参类型2, …
(3)举例:计算2个整数的和
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
(4)没有返回值的函数
如果函数没有返回值,有3种写法
func 函数名(形参列表) -> Void {
// 函数体...
}
func 函数名(形参列表) -> () {
// 函数体...
}
func 函数名(形参列表) {
// 函数体...
}
(5)没有形参的函数
一个函数如果没有形参,函数名后面的小括号也不能省略
func 函数名() -> Int {
// 函数体...
}
上面的函数没有形参、返回值是Int类型
(6)返回元组的函数
一个函数也可以返回元组数据
func find(id: Int) -> (name: String, age: Int) {
if id > {
return ("jack", )
} else {
return ("nobody", )
}
}
var people = find()
println("name=\(people.name), age=\(people.age)")
二、外部参数名
1.简单说明
一般情况下,通过形式参数的名字,就能推断出这个参数的含义和作用
func addStudent(name: String, age: Int, no: Int) {
println("添加学生:name=\(name),age=\(age),no=\(no)")
}
在函数内部一看参数名就知道这3个参数的作用
但是,形式参数是用在函数内部的,当调用函数时就看不见形参的名字,有可能导致以后会不太明白每个参数的含义
对于addStudent("jack", 20, 19)一眼望去,能猜出第1个参数"jack"是指姓名,后面的20、19分别代表什么含义?
为了解决上述问题,Swift提供了外部参数名语法
外部参数名可以在调用函数时提醒每个参数的含义
2.定义
外部参数名的定义格式如下:
func 函数名(外部参数名 形式参数名: 形式参数类型) -> 返回值类型 {
// 函数体...
}
外部参数名写在形式参数名的前面,与形式参数名之间用空格隔开
3.外部参数名的使用
func sum(number1 num1: Int, number2 num2: Int) -> Int
{
return num1 + num2
}
sum(number1: , number2: ) // 调用函数
注意:一旦定义了外部参数名,在调用函数时就必须加上外部参数名
4.外部参数名的简写
使用#能简化外部参数名的定义
func sum(#num1 : Int, #num2 : Int)
{
return num1 + num2
}
第1行代码的意思:num1、num2既是形式参数名,又是外部参数名
// 调用函数 sum(num1: 10, num2: 20)
三、默认参数值
(1)可以在定义函数时,给形参指定一个默认值,调用函数时,就可以不用给这个形参传值
func addStudent(name: String, age: Int = ) {
println("添加1个学生:name=\(name),age=\(age)")
}
addStudent("jack")
age参数有个默认值20,所以第4行调用函数时可以不传值给age参数
输出结果是:
添加1个学生:name=jack,age=20
(2)带有默认参数值的形参,Swift会自动给它生成一个跟形参名相同的外部参数名
age: Int = 20相当于#age: Int = 20
因此,如果要传入age参数值时,只能这么调用
addStudent("jack", age: 25)
(3)在带有默认参数值的参数名前加个下划线 _ ,调用函数时就不用写外部参数名
func addStudent(name: String, _ age: Int = ) {
println("添加1个学生:name=\(name),age=\(age)")
}
addStudent("jack", )
四、常量和变量参数
默认情况下,函数的参数都是常量参数,不能在函数内部修改
func test(num: Int) {
num =
}
func test(num: Int)参数相当于func test(let num: Int)
注意:第2行代码会报错
在有些情况下,可能需要在函数内部修改参数的值,这时需要定义变量参数
在参数名前面加个var即可
func test(var num : Int) {
num =
}
// 编写函数在某个字符串的尾部拼接N个其他字符串
func append(var string: String, suffix: String, count: Int) -> String
{
for _ in ..<count {
string += suffix
}
return string
}
append("jack", ".", ) // 调用函数
// jack....
五、输入输出参数
1.什么是输入输出参数?
在C语言中,利用指针可以在函数内部修改外部变量的值
在Swift中,利用输入输出参数,也可以在函数内部修改外部变量的值
输入输出参数,顾名思义,能输入一个值进来,也可以输出一个值到外部
2.输入输出参数的定义
在参数名前面加个inout关键字即可
func swap(inout num1: Int, inout num2: Int) {
}
3.代码示例:写一个函数交换外部2个变量的值
func swap(inout num1: Int, inout num2: Int) {
let tempNum1 = num1
num1 = num2
num2 = tempNum1
}
var a =
var b =
swap(&a, &b) // 传入的参数前面必须加上&
// 执行完swap函数后,a的值是10,b的值是20
4.输入输出参数的使用注意
传递实参时,必须在实参的前面加上&
不能传入常量或者字面量(比如10)作为参数值(因为它们都不可改)
输入输出参数不能有默认值
输入输出参数不能是可变参数
输入输出参数不能再使用let、var修饰(inout和let、var不能共存)
输入输出参数的价值之一
可以实现函数的多返回值(其实让函数返回元组类型,也能实现返回多个值)
iOS开发Swift篇—(七)函数(1)的更多相关文章
- 李洪强iOS开发Swift篇—08_函数(2)
李洪强iOS开发Swift篇—08_函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 1 func sum(num1 ...
- 李洪强iOS开发Swift篇—07_函数
李洪强iOS开发Swift篇—07_函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 ...
- iOS开发Swift篇—(七)函数
iOS开发Swift篇—(七)函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 形参名 ...
- iOS开发Swift篇—(八)函数(2)
iOS开发Swift篇—(八)函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 func sum(num1: Int ...
- iOS开发Swift篇—(一)简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- iOS开发Swift篇—(三)字符串和数据类型
iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http://www ...
- iOS开发Swift篇—(四)运算符
iOS开发Swift篇—(四)运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运算符: ...
- iOS开发Swift篇—(十)方法
iOS开发Swift篇—(十)方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 ( ...
随机推荐
- Java中内存中的Heap、Stack与程序运行的关系
堆和栈的内存管理 栈的内存管理是顺序分配的,而且定长,不存在内存回收问题:而堆 则是随机分配内存,不定长度,存在内存分配和回收的问题:堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动 ...
- MFC通过ODBC方式连接mysql
一. 要安装mysql-connector-odbc驱动 二. 配置数据源 电脑的控制面板-管理工具-数据源ODBC-系统DSN-添加-选择刚刚安装的mysql odbc Driver 参考 http ...
- C#委托,事件最初浅的和最易看懂的学习笔记
对于委托和事件,看了不少博文,当时好像都理解了,过了一段时间,又忘记的差不多了.每每如此,感觉自己很笨,记性差,其实是没有深入理解透切,没有按照自己的语言表达出来,当然容易忘记.今天又花了一些时间,好 ...
- 随机获取数据库中的某一条数据(基于yii2框架开发)
注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...
- mysql已有数据字符集转换
下面模拟把latin1字符集的数据转换为utf8字符集 一.创建测试表和测试数据: 1.修改会话级别的连接字符集 mysql > set names latin1; 查看一下: 2.创建测试表: ...
- myisam压缩(前缀压缩)索引
myisam使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,默认只压缩字符串,但通过参数配置也可以对整数做压缩,myisam压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其 ...
- noi 4982 踩方格
题目链接:http://noi.openjudge.cn/ch0206/4982/ 深搜很好写. DP:O(n) d[i] 为走 I 不的方案数, l[i],r[i],u[i]为第一步走 左,右,上, ...
- Android study first ----------安卓项目目录结构及adb指令
#Android项目的目录结构 * Activity:应用被打开时显示的界面 * src:项目代码 * R.java:项目中所有资源文件的资源id * Android.jar:Android的jar包 ...
- CSS3的chapter6
CSS布局 div标签: 在css布局方式中,div 是这种布局方式的核心对象,我们的页面排版不再依赖于表格, 仅从div的使用上说,做一个简单的布局只需要两样东西:div 与 cs ...
- 修改PHP 上传文件大小限制
Windows 环境下的修改方法 ================================================================第一步:修改在php5下POST文件大 ...