01-函数的定义与调用
// 函数的定义
func 问候(姓名 : String) -> String {
return "你好 \(姓名)"
}
// 函数的调用
println(问候("Aaron"))
02-形式参数与返回值之多参与无参
// 多参
func 开区间长度(起始 : Int, 终止 : Int) ->Int {
return 终止 - 起始
}
println(开区间长度(1, 100))
// 无参
func 问候() -> String {
return "你好"
}
println(问候())
03-形式参数与返回值之忽略返回值
func 显示并计数(一个字符串 : String) -> Int {
println(一个字符串)
return countElements(一个字符串)
}
// 忽略返回值
显示并计数("Hello World")
04-形式参数与返回值之多返回值
func 取极值(整数数组 : [Int]) -> (Int, Int) {
var 最大值 = 整数数组[0]
var 最小值 = 整数数组[0]
for 数组元素 in 整数数组[1..<整数数组.count] {
if (数组元素 > 最大值) {
最大值 = 数组元素
} else if (数组元素 < 最小值) {
最小值 = 数组元素
}
}
return (最小值, 最大值)
}
var (最小值, 最大值) = 取极值([-10, -5, 5, 0, 12, 66, -53])
println(最小值)
println(最大值)
05-形式参数与返回值之可选类型返回值
func 取极值(整数数组 : [Int]) -> (min : Int, max : Int)? {
if (整数数组.isEmpty) {
return nil
}
var 最大值 = 整数数组[0]
var 最小值 = 整数数组[0]
for 数组元素 in 整数数组[1..<整数数组.count] {
if (数组元素 > 最大值) {
最大值 = 数组元素
} else if (数组元素 < 最小值) {
最小值 = 数组元素
}
}
return (最小值, 最大值)
}
if var 临时数组 = 取极值([]) {
println("最小值是\(临时数组.min), 最大值是\(临时数组.max)")
} else {
println("临时数组为nil")
}
if var 临时数组 = 取极值([-10, 0, 23, 4435, -54236, 77, 233341]) {
println("最小值是\(临时数组.min), 最大值是\(临时数组.max)")
} else {
println("临时数组为nil")
}
06-本地参数与外部参数
func 问候(#姓名 : String, #头衔 : String) {
// 本地参数
println("你好 \(姓名) \(头衔)")
}
// 外部参数
问候(姓名: "Aaron", 头衔: "Student")
07-参数的默认值
func 问候(姓名 : String, 头衔 : String = "先生") {
println("你好 \(姓名) \(头衔)")
}
问候("Aaron")
// 设置参数的默认值会将其变为外部参数
问候("Aaron", 头衔: "Student")
08-可变参数
func 成绩(学科 : String, 平时成绩集 : Int...) -> String {
var 总成绩 = 0
for 平时成绩 in 平时成绩集 {
总成绩 += 平时成绩
}
return "\(学科) : \(总成绩)"
}
成绩("语文", 20, 30, 10, 30)
成绩("数学", 20, 75)
09-变量参数
func 右对齐(var 文本: String, 一行的长度: Int, 填充字符: String) ->String {
let 填充的长度 = 一行的长度 - countElements(文本)
for _ in 1...填充的长度 {
文本 = 填充字符 + 文本
}
return 文本
}
let a = "Aaron"
右对齐(a, 20, "-")
10-inout参数
func swap(inout a: Int, inout b: Int) {
a = b - a
b = b - a
a = b + a
}
var a = 1
var b = 3
swap(&a, &b)
11-函数的类型
// (Int, Int) -> Int 类型
func addTwoInts(a: Int, b: Int) ->Int {
return a + b
}
// () -> () 类型
func printHelloWorld() {
println("hello, world")
}
12-函数作为常量与变量
func 两个数相加(a: Int, b: Int) ->Int {
return a + b
}
func 两个数相乘(a: Int, b: Int) ->Int {
return a * b
}
var 临时函数 = 两个数相加
println("2 + 5 = \(临时函数(2, 5))")
临时函数 = 两个数相乘
println("2 × 5 = \(临时函数(2, 5))")
13-函数作为参数
func 两个数相乘(a: Int, b: Int) ->Int {
return a * b
}
func 计算结果(a: Int, b: Int, 计算函数: (Int, Int) ->Int) {
println("\(a) × \(b) = \(计算函数(a, b))")
}
计算结果(2, 6, 两个数相乘)
14-函数作为返回值
func 加(a: Int) ->Int {
return a + 1
}
func 减(a: Int) ->Int {
return a - 1
}
func 归零(正数: Bool) ->((Int) ->Int) {
return 正数 ? 减 : 加
}
var a = 100
let b = 归零(a > 0)
while (a != 0) {
println(a)
a = b(a)
}
15-函数嵌套
func 归零(正数: Bool) ->((Int) ->Int) {
// 嵌套的函数是私有的
func 增加(a: Int) ->Int {
return a + 1
}
func 减少(a: Int) ->Int {
return a - 1
}
return 正数 ? 减少 : 增加
}
var a = 100
let b = 归零(a > 0)
while (a != 0) {
println(a)
a = b(a)
}