Swift中文教程第二章-2.6函数
- 格式:pdf
- 大小:659.75 KB
- 文档页数:14
从入门到精通学习Swift编程的完整教程本文旨在为初学者提供一份从入门到精通学习Swift编程的完整教程。
Swift是一种用于开发iOS、macOS、watchOS和tvOS应用程序的编程语言,它具有易于学习、强大和高效的特点。
本教程将按照以下顺序介绍Swift编程的基础知识、进阶内容和高级技巧。
一、Swift入门1. Swift简介在本节中,我们将介绍Swift编程语言的背景和基本特性,以及它与其他编程语言的比较。
2. 开发环境搭建在本节中,我们将提供详细的步骤,帮助您下载、安装和配置Swift编程环境。
3. 第一个Swift程序在本节中,我们将编写并运行您的第一个Swift程序,以便您了解Swift语法和基本结构。
4. 数据类型和变量本节将向您介绍Swift中的数据类型和变量的概念,帮助您掌握如何声明和使用它们。
5. 控制流在这一部分,您将学习如何使用条件语句和循环结构来控制程序的流程和执行。
6. 函数和闭包本节将详细介绍Swift中函数和闭包的使用方法,包括函数的定义、调用和参数传递等。
7. 集合类型您将了解Swift中的数组、字典和集合等集合类型,并学习如何使用它们来组织和处理数据。
二、Swift进阶8. 结构体和类在这一部分,您将深入探讨Swift中的结构体和类,并学习如何使用它们来创建自定义的数据类型。
9. 协议和扩展本节将介绍Swift中协议和扩展的概念,以及如何使用它们来实现代码的模块化和功能的扩展。
10. 错误处理您将学习如何使用Swift中的错误处理机制来处理程序中的异常情况,并编写更健壮的代码。
11. 泛型编程在本节中,我们将介绍Swift中的泛型编程,帮助您编写更灵活、可复用的代码。
三、Swift高级技巧12. 异步编程本节将介绍Swift中的异步编程模型,包括使用GCD和闭包来处理并发任务。
13. 内存管理在这一部分,您将学习如何在Swift中进行内存管理,包括使用自动引用计数(ARC)和解决循环引用等问题。
Swift编程初学者教程第一章:介绍Swift编程语言1.1 Swift的起源和发展1.2 Swift的特点和优势1.3 Swift与其他编程语言的比较第二章:环境搭建和基础知识2.1 安装Xcode开发环境2.2 Xcode的界面介绍2.3 编写第一个Swift程序2.4 变量和常量的声明和使用2.5 数据类型和类型推断2.6 基本运算符和表达式第三章:控制流程和函数3.1 条件语句:if、switch3.2 循环语句:for、while、repeat-while3.3 控制流程语句:break、continue、fallthrough、return、throw3.4 函数的定义和调用3.5 函数的参数和返回值3.6 函数的重载和内嵌函数第四章:集合类型和容器4.1 数组:定义、访问、遍历、增删改查 4.2 字典:定义、访问、遍历、增删改查 4.3 集合:定义、遍历、增删查找、操作符 4.4 元组:定义、访问、比较、解构第五章:面向对象编程5.1 类和对象的定义5.2 属性和方法的声明和使用5.3 继承和多态的实现5.4 类型和实例方法的区别5.5 访问控制:public、internal、private5.6 扩展和协议的应用第六章:错误处理和异常6.1 错误类型的定义和处理方式6.2 异常处理机制:try、catch、throw 6.3 自定义错误类型和错误处理函数 6.4 异常传递和捕获的注意事项第七章:可选类型和强制解包7.1 可选类型的概念和使用场景7.2 对可选类型的赋值和判空处理7.3 强制解包的概念和用法7.4 可选绑定和隐式解析可选类型7.5 可选链式调用和可选映射第八章:面向协议编程8.1 协议的定义和实现8.2 协议的继承和实现8.3 协议的扩展和默认实现8.4 类型的遵循和协议的组合8.5 协议的应用和优势第九章:并发编程和多线程9.1 多线程的概念和应用场景9.2 线程的创建和销毁9.3 线程的同步和互斥9.4 GCD的使用和常见操作9.5 多线程编程的注意事项第十章:应用开发实例10.1 界面布局和交互设计原则10.2 使用Storyboards创建界面10.3 控件的使用和事件的处理10.4 数据的存储和读取10.5 应用发布和调试技巧本教程通过多个章节的组合,详细介绍了Swift编程语言的基础知识和高级特性。
简单易懂的Swift编程入门指南第一章:引言Swift是一种由苹果公司开发的通用编程语言,旨在为iOS、macOS、watchOS和tvOS平台提供简单易懂的开发体验。
Swift编程语言结合了C和Objective-C的优点,提供了现代化且安全的编程语法,能够快速地构建高效、可靠的应用程序。
第二章:安装和设置在开始学习Swift编程之前,我们首先需要安装Xcode开发环境。
Xcode是苹果公司专门为开发人员提供的集成开发环境,其中包含了Swift编译器和其他编程工具。
安装Xcode后,我们可以开始创建和运行我们的第一个Swift应用程序。
第三章:Swift基础语法Swift是一种类型安全的编程语言,它要求变量或常量在使用之前必须进行显式声明并指定其类型。
Swift还支持许多常见的编程结构,如条件语句、循环语句和函数。
我们将详细介绍这些语法的使用方法,并且通过示例代码展示如何使用它们。
第四章:Swift数据类型Swift提供了多种数据类型,包括整数类型、浮点数类型、布尔类型以及字符串类型。
我们将学习如何声明和初始化这些数据类型,并且介绍它们的常用操作和方法。
第五章:集合类型集合类型是Swift编程中的重要概念,它包括数组、字典和集合。
我们将学习如何创建和操作这些集合,并且通过示例代码展示它们的常见用法。
第六章:面向对象编程Swift是一种面向对象的编程语言,它支持类、结构体、枚举和协议等面向对象的编程概念。
我们将学习如何声明和使用类、结构体和枚举,以及它们之间的继承和关系。
第七章:错误处理在开发应用程序时,错误处理是非常重要的。
Swift提供了一种强大而灵活的错误处理机制,我们将详细介绍如何在Swift中处理错误,并且讨论一些常见的错误处理方法。
第八章:应用程序开发在前面的章节中,我们学习了Swift编程的基础知识和语法。
现在,我们将使用所学的知识来开发一个简单的iOS应用程序。
我们将学习如何设计界面、处理用户输入以及与后端服务器进行通信。
Swift编程基础入门指南章节一:介绍Swift编程语言(200字)Swift是一种高级的、面向对象的编程语言,由苹果公司于2014年推出。
相比于传统的Objective-C语言,Swift更具简洁性和安全性,使得开发者能够更轻松地编写出高性能、可靠的应用程序。
本文将从基础入门的角度,为读者提供Swift编程的全面指导。
章节二:安装与环境配置(200字)在开始编程之前,我们需要安装Swift开发环境。
首先,确保你的电脑上已安装最新版本的Xcode开发工具,该工具包含了Swift编译器以及其他必要的工具。
接下来,根据操作系统版本,我们可以选择安装适用于macOS、Linux或Windows的Swift开发环境。
章节三:基础语法与数据类型(300字)学习一门编程语言的基础语法是非常重要的。
在Swift中,我们可以通过声明变量和常量来存储和操作数据。
变量使用var关键字声明,而常量使用let关键字声明。
Swift支持各种数据类型,包括整数、浮点数、布尔值、字符串等。
此外,Swift还提供了强大的类型推断功能,可以根据赋值语句自动推断出变量的类型。
章节四:流程控制与函数(300字)在编程中,我们常常需要根据不同的条件进行不同的操作。
Swift提供了诸如if语句、for循环、switch语句等流程控制语句,以满足各种需求。
同时,Swift还支持定义和使用函数,函数可以封装一段可重复使用的代码,提高代码的复用性和可读性。
我们可以通过参数和返回值来传递数据和获取结果。
章节五:面向对象编程与结构体(300字)面向对象编程是一种常用的编程范式,Swift也支持面向对象编程。
在Swift中,我们可以创建类、定义属性和方法,并通过实例化类来使用其功能。
此外,Swift还引入了结构体这一概念,结构体可以用于创建轻量级的数据结构,适用于简单的数据封装和传递。
章节六:错误处理与异常处理(200字)在开发过程中,可能会出现各种错误和异常情况。
Swift学习笔记(函数)函数函数是⼀个独⽴的代码块,⽤来执⾏特定的任务。
Swift中的函数与Object-C中的函数⼀样,但是声明与书写的⽅式不太⼀样,现在我们就通过⼏个例⼦介绍⼀下Swift中的函数。
简单的来说,他与JS中的函数声明有些相像,但是如果有返回值的时候,他们返回值的书写⽅式⼜有不同。
先来说⼀个简单的例⼦//greet 函数的名称//personName:函数的形式参数,可以为多个⽤逗号隔开//->String 函数的返回值类型如果没有可以不写func greet(personName:String) ->String {let greeting = "hello:" + personName + "!"print(greeting)return greeting;}//函数的调⽤greet(personName: "tian")函数的形式参数和返回值在Swift中,函数的形式参数和返回值⾮常灵活,你可以定义从⼀个简单的只有⼀个未命名形式参数的⼯具函数到那种具有形象的参数名称和不同的形式参数选项的复杂函数之间的任何函数。
⽆形式参数的函数函数没有要求必须输⼊⼀个参数,或者函数内部不需要接受外部的变量就可以完成特定的功能,例⼦//⽆形式参数的函数func sayHelloWorld()->String {return"Hello World"}print(sayHelloWorld());函数的定义仍然需要在名字后边加⼀个圆括号,即使它不接受形式参数也得这样做。
当函数被调⽤的时候也要在函数的名字后边加⼀个空的圆括号。
多形式参数的函数func greet(personName:String) ->String {let greeting = "hello:" + personName + "!"print(greeting)return greeting;}//函数的调⽤greet(personName: "tian")//多形式参数的函数/*函数可以输⼊多个形式参数可以卸载寒暑后⾯的圆括号内⽤逗号分隔*/func greetAgain(person:String) -> String {return"Hello one more time"}func secondGreet(person:String,alreadGreeted:Bool) -> String {if alreadGreeted {return greetAgain(person:person);}else {return greet(personName: person)}}//调⽤函数secondGreet(person: "tian", alreadGreeted: false)⽆返回值的函数//⽆返回值的函数/*函数定义中没有要求必须有⼀个返回类型下⾯是另⼀个版本的greet函数*/func thirdGreet(person:String) {print("Hello,\(person)")}thirdGreet(person: "tian")因为没有反悔值,函数在定义的时候就不⽤写(->)或者返回类型//我们在调⽤函数的时候也可以忽略函数的返回值func printAndCount(string:String) ->Int {print(string)return string.characters.count}func printWithoutCounting(string:String) {let _ = printAndCount(string: "tianfeng")}printAndCount(string: "liantian");printWithoutCounting(string: "swift")注意:返回值可以被忽略但是如果⼀个函数需要返回值的时候就必须返回,如果⼀个函数有定义返回类型,没有反回值的话就不会运⾏到函数的末尾,会报编译时的错误多返回值的函数为了让函数返回多个值作为⼀个复合的返回值,你可以使⽤元组类型作为返回类型。
Swift的74个常⽤内置函数介绍Swift包含了74个内置函数,但在 The Swift Programming Langage ⼀书中只介绍了其中的7个,其它的都没有在⽂档中体现。
这篇⽂章列举出了所有的Swift库函数。
⽂中所谓的内置函数是指⽆需引⼊任何模块(⽐如说Fundation等)即可以直接使⽤的函数。
下⾯先来看看7个在⽂档中提到的库函数:下⾯列出⼀些很实⽤,但未在⽂档中体现的库函数:复制代码代码如下://断⾔,参数如果为`true`则继续,否则抛出异常//assert mentioned on page 55assert(true)//计算序列的元素个数// countElements mentioned on page 79countElements("foo") == 3//返回⼀个新的序列,其中每个元素是⼀个元组,//第⼀个值为原来元素所在的位置`index`,第⼆个为原来序列中的元素// enumerate mentioned on page 94for (i, j) in enumerate(["A", "B"]) {// "0:A", "1:B" will be printedprintln("\(i):\(j)")}//返回所有参数中的最⼩值// min mentioned on page 246min(8, 2, 3) == 2//打印// print mentioned on page 85print("Hello ")//打印(带换⾏)// println mentioned on page 4println("World")//排序// sort mentioned on page 14for i in sort(["B", "A"]) {// "A", "B" will be printedprintln(i)}abs(signedNumber):返回数字的绝对值复制代码代码如下:abs(-1) == 1abs(-42) == 42abs(42) == 42contains(sequence, element):如果某个序列sequence(⽐如说⼀个数组)包含指定的元素element,则返回true,否则返回false。
swift 函数参数Swift 函数参数在 Swift 中,函数是一等公民,具有很强的灵活性和扩展性,而函数参数则是函数中非常重要的组成部分之一,函数参数的使用不仅可以简化代码,也可以提高代码的可读性和可维护性。
本文将从以下几个方面来介绍 Swift 函数参数的相关内容:1. 定义函数参数在 Swift 中,函数参数的定义方式与其他编程语言有所不同,主要分为以下几种:1.1. Required ParametersRequired Parameters 是必须的参数,也就是在调用函数时必须传入的参数,如果没有传入则会编译报错。
下面是一个计算两个数之和的函数,其中 a 和 b 就是Required Parameters:func sum(a: Int, b: Int) -> Int {return a + b}调用时必须传入 a 和 b 的值,否则会编译报错:let result = sum(a: 1, b: 2)print(result) // 输出 31.2. Optional ParametersOptional Parameters 是可选的参数,也就是在调用函数时可以传入也可以不传入的参数,在函数中需要判断传入的参数是否为 nil。
下面是一个计算两个数之差的函数,其中 b 是 Optional Parameters:func difference(a: Int, b: Int? = nil) -> Int {if let b = b {return a - b} else {return a}}调用时可以传入 a 和 b 的值,也可以只传入 a 的值,如果不传入 b 的值,则 b 的值默认为 nil:let result1 = difference(a: 5, b: 2)let result2 = difference(a: 5)print(result1) // 输出 3print(result2) // 输出 51.3. Variadic ParametersVariadic Parameters 是变参,也就是可以传入任意个数的值,多个值之间用逗号分隔。
苹果Swift编程语言入门教程【中文版】目录1简介2Swift入门3简单值4控制流5函数与闭包6对象与类7枚举与结构1简介Swift是供iOS和OSX应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。
Swift采用了安全的编程模式和添加现代的功能来是的编程更加简单、灵活和有趣。
界面则基于广受人民群众爱戴的Cocoa和CocoaTouch框架,展示了软件开发的新方向。
Swift已经存在了多年。
Apple基于已有的编译器、调试器、框架作为其基础架构。
通过ARC(AutomaticReferenceCounting,自动引用计数)来简化内存管理。
我们的框架栈则一直基于Cocoa。
Objective-C进化支持了块、collectionliteral和模块,允许现代语言的框架无需深入即可使用。
(bygashero)感谢这些基础工作,才使得可以在Apple软件开发中引入新的编程语言。
Objective-C开发者会感到Swift的似曾相识。
Swift采用了Objective-C的命名参数和动态对象模型。
提供了对Cocoa框架和mix-and-match的互操作性。
基于这些基础,Swift引入了很多新功能和结合面向过程和面向对象的功能。
Swift对新的程序员也是友好的。
他是工业级品质的系统编程语言,却又像脚本语言一样的友好。
他支持playground,允许程序员实验一段Swift代码功能并立即看到结果,而无需麻烦的构建和运行一个应用。
Swift集成了现代编程语言思想,以及Apple工程文化的智慧。
编译器是按照性能优化的,而语言是为开发优化的,无需互相折中。
(bygashero)可以从"Hello,world"开始学起并过渡到整个系统。
所有这些使得Swift成为Apple软件开发者创新的源泉。
Swift是编写iOS和OSX应用的梦幻方式,并且会持续推进新功能的引入。
属性 (Properties)本页包含内容:存储属性(Stored Properties)计算属性(Computed Properties)属性监视器(Property Observers)全局变量和局部变量(Global and Local Variables)类属性(Type Properties)属性将值跟特定的类、结构或枚举关联。
一种是存储属性,把常量或变量的值作为实例的一部分,一种是计算属性,它计算一个值。
计算属性可以用于类、结构和枚举里,存储属性只能用于类和结构。
存储属性和计算属性通常用于特定类型的实例,但是,属性也可以直接用于类型本身,这种属性称为类属性。
另外,还可以定义属性监视器来监控属性值的变化,以此来触发一个自定义的操作。
属性监视器可以添加到自己写的存储属性上,也可以添加到从父类继承的属性上。
存储属性简单来说,一个存储属性就是一个特定类型实例里表示常量或变量的部分,存储属性可以是变量存储属性(用关键字v a r定义),也可以是常量存储属性(用关键字l e t定义)。
可以在定义存储属性的时候指定默认值,详见默认属性值一节。
也可以在初始化阶段设置或修改存储属性的值,甚至修改常量存储属性的值,详见在初始化阶段修改常量存储属性一节。
下面的例子定义了一个名为F i x e d L e n g t h R a n g e的结构体,表示一个在创建后无法修改整数范围的类型:s t r u c t F i x e d L e n g t h R a n g e{v a r f i r s t V a l u e:I n tl e t l e n g t h:I n t}v a r r a n g e O f T h r e e I t e m s=F i x e d L e n g t h R a n g e(f i r s t V a l u e:0,l e n g t h:3)//t h e r a n g e r e p r e s e n t s i n t e g e r v a l u e s0,1,a n d2r a n g e O f T h r e e I t e m s.f i r s t V a l u e=6//t h e r a n g e n o w r e p r e s e n t s i n t e g e r v a l u e s6,7,a n d8F i x e d L e n g t h R a n g e的实例包含一个名为f i r s t V a l u e的变量存储属性和一个名为l e n g t h的常量存储属性。
函数(Functions)本页包含内容:函数定义与调用函数参数与返回值函数参数名称函数类型函数嵌套函数是用来完成特定任务的独立的代码块。
你给一个函数起一个合适的名字,用来标示函数做什么,并且当函数需要执行的时候,这个名字会被“调用”。
Swift统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的C风格函数,到复杂的带局部和外部参数名的Objective-C风格函数。
参数可以提供默认值,以简化函数调用。
参数也可以即当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改。
在Swift中,每个函数都有一种类型,包括函数的参数值类型和返回值类型。
你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。
函数的定义可以写在在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。
函数的定义与调用(Defining and Calling Functions)当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入(称为参数,parameters),也可以定义某种类型的值作为函数执行结束的输出(称为返回类型)。
每个函数有个函数名,用来描述函数执行的任务。
要使用一个函数时,你用函数名“调用”,并传给它匹配的输入值(称作实参,arguments)。
一个函数的实参必须与函数参数表里参数的顺序一致。
在下面例子中的函数叫做"g r e e t i n g F o r P e r s o n",之所以叫这个名字是因为这个函数用一个人的名字当做输入,并返回给这个人的问候语。
为了完成这个任务,你定义一个输入参数-一个叫做p e r s o n N a m e 的S t r i n g值,和一个包含给这个人问候语的S t r i n g类型的返回值:f u n c s a y H e l l o(p e r s o n N a m e:S t r i n g)->S t r i n g{l e t g r e e t i n g="H e l l o,"+p e r s o n N a m e+"!"r e t u r n g r e e t i n g}所有的这些信息汇总起来成为函数的定义,并以f u n c作为前缀。
指定函数返回类型时,用返回箭头->(一个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示。
该定义描述了函数做什么,它期望接收什么和执行结束时它返回的结果是什么。
这样的定义使的函数可以在别的地方以一种清晰的方式被调用:p r i n t l n(s a y H e l l o("A n n a"))//p r i n t s"H e l l o,A n n a!"p r i n t l n(s a y H e l l o("B r i a n"))//p r i n t s"H e l l o,B r i a n!调用s a y H e l l o函数时,在圆括号中传给它一个S t r i n g类型的实参。
因为这个函数返回一个S t r i n g类型的值,s a y H e l l o可以被包含在p r i n t l n的调用中,用来输出这个函数的返回值,正如上面所示。
在s a y H e l l o的函数体中,先定义了一个新的名为g r e e t i n g的S t r i n g常量,同时赋值了给p e r s o n N a m e的一个简单问候消息。
然后用r e t u r n关键字把这个问候返回出去。
一旦r e t u r n g r e e t i n g被调用,该函数结束它的执行并返回g r e e t i n g的当前值。
你可以用不同的输入值多次调用s a y H e l l o。
上面的例子展示的是用"A n n a"和"B r i a n"调用的结果,该函数分别返回了不同的结果。
为了简化这个函数的定义,可以将问候消息的创建和返回写成一句:f u n c s a y H e l l o Ag a i n(p e r s o n N a m e:S t r i n g)->S t r i n g{r e t u r n"H e l l o a g a i n,"+p e r s o n N a m e+"!"}p r i n t l n(s a y H e l l o A g a i n("A n n a"))//p r i n t s"H e l l o a g a i n,A n n a!函数参数与返回值(Function Parameters and Return Values)函数参数与返回值在Swift中极为灵活。
你可以定义任何类型的函数,包括从只带一个未名参数的简单函数到复杂的带有表达性参数名和不同参数选项的复杂函数。
多重输入参数(Multiple Input Parameters)函数可以有多个输入参数,写在圆括号中,用逗号分隔。
下面这个函数用一个半开区间的开始点和结束点,计算出这个范围内包含多少数字:f u n c h a l f O p e n R a ng e L e n g t h(s t a r t:I n t,e n d:I n t)->I n t{r e t u r n e n d-s t a r t}p r i n t l n(h a l f O p e n R a n g e L e n g t h(1,10))//p r i n t s"9无参函数(Functions Without Parameters)函数可以没有参数。
下面这个函数就是一个无参函数,当被调用时,它返回固定的S t r i n g消息:f u n c s a y H e l l o W o r l d()->S t r i n g{r e t u r n"h e l l o,w o r l d"}p r i n t l n(s a y H e l l o W o r l d())//p r i n t s"h e l l o,w o r l d尽管这个函数没有参数,但是定义中在函数名后还是需要一对圆括号。
当被调用时,也需要在函数名后写一对圆括号。
无返回值函数(Functions Without Return Values)函数可以没有返回值。
下面是s a y H e l l o函数的另一个版本,叫w a v e G o o d b y e,这个函数直接输出S t r i n g值,而不是返回它:f u n c s a y G o o d b y e(p e r s o n N a m e:S t r i n g){p r i n t l n("G o o d b y e,\(p e r s o n N a m e)!")}s a y G o o d b y e("D a v e")//p r i n t s"G o o d b y e,D a v e!因为这个函数不需要返回值,所以这个函数的定义中没有返回箭头(->)和返回类型。
注意:严格上来说,虽然没有返回值被定义,s a y G o o d b y e函数依然返回了值。
没有定义返回类型的函数会返回特殊的值,叫V o i d。
它其实是一个空的元组(tuple),没有任何元素,可以写成()。
被调用时,一个函数的返回值可以被忽略:f u n c p r i n t A n d C o u n t(s t r i ng T o P r i n t:S t r i n g)->I n t{p r i n t l n(s t r i n g T o P r i n t)r e t u r n c o u n t E l e m e n t s(s t r i n g T o P r i n t)}f u n c p r i n t W i t h o u t C o u n t i n g(s t r i ng T o P r i n t:S t r i n g){p r i n t A n d C o u n t(s t r i n g T o P r i n t)}p r i n t A n d C o u n t("h e l l o,w o r l d")//p r i n t s"h e l l o,w o r l d"a n d r e t u r n s a v a l u e o f12p r i n t W i t h o u t C o u n t i n g("h e l l o,w o r l d")//p r i n t s"h e l l o,w o r l d"b u t d o e s n o t r e t u r n a v a l u e第一个函数p r i n t A n d C o u n t,输出一个字符串并返回I n t类型的字符数。
第二个函数p r i n t W i t h o u t C o u n t i n g调用了第一个函数,但是忽略了它的返回值。
当第二个函数被调用时,消息依然会由第一个函数输出,但是返回值不会被用到。
注意:返回值可以被忽略,但定义了有返回值的函数必须返回一个值,如果在函数定义底部没有返回任何值,这叫导致编译错误(compile-time error)。
多重返回值函数(Functions with Multiple Return Values)你可以用元组(tuple)类型让多个值作为一个复合值从函数中返回。
下面的这个例子中,c o u n t函数用来计算一个字符串中元音,辅音和其他字母的个数(基于美式英语的标准)。
f u n c c o u n t(s t r i n g:S t r i n g)->(v o w e l s:I n t,c o n s o n a n t s:I n t,o t h e r s:I n t){v a r v o w e l s=0,c o n s o n a n t s=0,o t h e r s=0f o r c h a r a c t e r i n s t r i n g{s w i t c h S t r i n g(c h a r a c t e r).l o w e r c a s e S t r i n g{c a s e"a","e","i","o","u":++v o w e l sc a s e"b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":++c o n s o n a n t sd e f a u l t:++o t h e r s}}r e t u r n(v o w e l s,c o n s o n a n t s,o t h e r s)}你可以用c o u n t函数来处理任何一个字符串,返回的值将是一个包含三个I n t型值的元组(tuple):l e t t o t a l=c o u n t("s o m e a r b i t r a r y s t r i n g!")p r i n t l n("\(t o t a l.v o w e l s)v o w e l s a n d\(t o t a l.c o n s o n a n t s)c o n s o n a n t s")//p r i n t s"6v o w e l s a n d13c o n s o n a n t s需要注意的是,元组的成员不需要在函数中返回时命名,因为它们的名字已经在函数返回类型有有了定义。