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不能共存)

输入输出参数的价值之一

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

目录
相关文章
|
机器学习/深度学习 TensorFlow Swift
Swift语言适合多个领域的开发
Swift语言适合多个领域的开发
429 9
|
安全 编译器 Swift
Swift开发
Swift开发
442 9
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
462 9
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
583 2
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
484 2
|
设计模式 安全 测试技术
Swift代码审查的关键点及最佳实践,涵盖代码风格一致性、变量使用合理性、函数设计、错误处理、性能优化、安全性、代码注释等方面,旨在提升代码质量和项目管理水平
本文深入探讨了Swift代码审查的关键点及最佳实践,涵盖代码风格一致性、变量使用合理性、函数设计、错误处理、性能优化、安全性、代码注释等方面,旨在提升代码质量和项目管理水平。通过实际案例分析,展示了如何有效应用这些原则,确保代码的高可读性、可维护性和可靠性。
404 2
|
Swift
swift语言IOS8开发战记13 Review Controller
   前几话我们在程序中增加了一个顶部的导航栏,今天我们想要在底部增加一些功能,增加一个share和一个review的按钮。
1190 0
|
Swift
swift语言IOS8开发战记14 UIView Animation
       这一话我们来增加一些动画效果,首先在上一话的基础上,我们想把我们的评价部分放到一个单独的view中,如下图中的红框部分 建立一个全局变量transforView,定义为UIV...
1030 0
|
Swift
Swift语言IOS8开发战记9.transfer data without stroyboard
       上一话我们实现了通过导航和控制器进行页面间的跳转,但是后一个页面是空的,本话来实现在跳转的同时,前一个页面向后一个页面传值,相信这也是大家什么关注的问题。
1068 0
|
网络架构 iOS开发 Swift
Swift语言IOS8开发战记10.Data Model
上一话中实现了两个控制器间的传值,最终效果如图: 这是我们的主页面: 在ViewController中我们主页显示的内容是放到不同的数组中的: var restaurantNames ...
1079 0

相关课程

更多