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

输入输出参数的价值之一

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

时间: 2024-08-21 16:01:22

iOS开发Swift篇—(七)函数(1)的相关文章

iOS开发Swift篇(01) 变量&amp;常量&amp;元组

说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年部分iOS开发Swift篇专题的博文也不再做任何的校正和更新,特此说明. 2)该博文对应代码可以在https://github.com/HanGangAndHanMeimei/Code获得. 一.变量和常量 01 变量和常量的定义 在swift中变量使用var来修饰,常量使用let来修饰,变量可以修改而常量不能被修改. 变量:var 常量:let 格式:修饰符(v

iOS开发Swift篇—简单介绍

一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为"雨燕",是它的LOGO 是一只燕子,跟Objective-C一样,可以用于开发iOS.Mac应用程序 苹果从2010年7月开始设计Swift语言,耗时4年打造 Swift的语法特点 从它的语法中能看到Objective-C.JavaScript.Python等语言的影子 语法简单.代码简洁.使用方便 可与Objective-C混合使用(相互调用) 为什么要设计Swift语言? 让应

iOS开发Swift篇—(八)函数(2)

一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 1 func sum(num1: Int, num2: Int) -> Int { 2 return num1 + num2 3 } sum函数的函数类型是(Int, Int) -> Int 1 func printLine() 2 { 3 println("-----------") 4 } printLine函数的函数类型有4种表示方法 (1)Voi

iOS开发Swift篇—(二)变量和常量

一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 在实现 RC4加密算法时Objective-C的的性能是Python的127倍,Swift的性能是Python的220倍 有持怀疑态度的国外程序员,也对Objective-C和Swift的性能进行了测试 http://www.splasmata.com/?p=2798 (2)说明 目前的性能不是开发者最需要担心的问题 苹果已经全盘掌握了这个

iOS开发Swift篇(02) NSThread线程相关简单说明

一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThread在swift语境中的一些使用和注意点,别他. 3)本文涉及代码可以从https://github.com/HanGangAndHanMeimei/Code地址获得. 二 NSThread的基本使用和创建 1)基本用法(主线程|当前线程) 1 //1.获得执行该方法的当前线程 2 let currentThread = NSThread.currentThread()

iOS开发Swift篇—(三)字符串和数据类型

一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http://www.wendingding.com" 1.字符串的常见操作 (1)用加号 + 做字符串拼接 let scheme = "http://" let path = "www.wendingding.com" let website = scheme + path // website的内容是"http:/

iOS开发Swift篇—(十)方法

一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 (2)类型方法(Type Methods) 在OC中,类型方法以加号(+)开头 二.实例方法 1.什么是实例方法? 实例方法:就是只能用对象实例调用的方法,也可以称为"对象方法" 实例方法的语法跟函数基本一样 2.代码示例: 1 class Dog { 2 func run() { 3 println("Dog---

iOS开发Swift篇—(四)运算符

一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运算符:++.-- 比较运算符:==.!=.>.<.>=.<= 逻辑运算符:&&.||.! 三目运算符:? : 范围运算符:..< .... 溢出运算符:&+.&-.&*.&/.&% 2.赋值运算符 (1)1对1赋值 var a = 5 let b = 20 (2)N对

iOS开发Swift篇—(九)属性

一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要1个.swift文件 Swift中类的定义格式 1 class 类名 { 2 // ... 属性和方法 3 } 二.属性 1.什么是属性 Swift中的属性(Properties),就类似于其他面向对象语言中的成员变量 2.属性的分类 按照官方文档的说明,属性可以分为以下几种 (1)存储属性(Stored Properties) (2)计算