Swift 2.0 函数 定义、调用、参数返回值、函数类型、嵌套函数
2016-02-03 17:07
543 查看
Swift 2.0 函数
函数定义与调用函数参数与返回值
函数参数名称
函数类型
函数嵌套
函数定义与调用
定义:当你定义一个函数是,你可以定义一个或多个有名字和类型的值,作为函数的输入参数,也可以定义某种类型的值作为函数执行结束的输出即返回值。
func sayHello(name:String) ->String { let greeting = "Hello," + name + "!" return greeting } // 调用 print(sayHello("CrazyXin"))
函数参数与返回值
多中输入参数无参函数
多参数函数
五参数返回
一个函数的返回值可以被忽略
多中返回值函数
例子:
override func viewDidLoad() { print(halfOpenRangeLength(1, end: 10)) // 多重输入参数 print(sayHelloWorld()) // 无参函数 print(sayHello1("Tim", alreadyGreeted: true)) // 多参数函数 sayGoodbye("Dave") // 无参数返回 printAndCount("Hello,world") printWithoutCounting("hello,world") // 一个函数的返回值可以被忽略 print(minMax([10,39,4,9,30,2,6])) // 多重返回值函数 找出数组中的最大数和最小数 let bounds = minMax([10,39,4,9,30,2,6]) print("最小值 是\(bounds.min) 最大值是 \(bounds.max)") // 使用点语法来访问取回发现的最小值和最大值 运维元组的程远志被命名为函数的返回类型的一部分 可以使用点语法 minMax1([]) // 处理 传入空数据 数组越界问题 if let bounds = minMax1([8,-6,2,109,3,58]) { print("min is \(bounds.min) and max is \(bounds.max)") } // 方法: func sayHello(name:String) ->String { let greeting = "Hello," + name + "!" return greeting } func sayHelloAgain(personName:String) ->String { return "Hello again," + personName + "!" } func halfOpenRangeLength(start:Int,end:Int) ->Int { return end - start } func sayHelloWorld()->String { return "hello,world" } func sayHello1(personName:String,alreadyGreeted:Bool) ->String { if alreadyGreeted { return sayHelloAgain(personName) }else { return sayHello(personName) } } func sayGoodbye(personName:String) { print("Goodbye,\(personName)!") } func printAndCount(stringToPrint:String) ->Int { print(stringToPrint) return stringToPrint.characters.count } func printWithoutCounting(stringToPrint:String) { printAndCount(stringToPrint) } func minMax(array:[Int]) -> (min:Int,max:Int) { var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value }else if value > currentMax { currentMax = value } } return (currentMin,currentMax) } // 处理数组为空问题 :处理可选类型 函数使用 可选元组返回类型,并当数组为空时返回nil func minMax1(array:[Int])->(min:Int,max:Int)? { if array.isEmpty {return nil} var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin,currentMax) } }
函数参数名称
//调用 someFunction(externalParameterName: 2) // 制定外部参数名 print(sayHello(to: "1", and: "2")) // 制定外部参数名 someFunction(1, 2) // 如果你不想为第二个及后续的参数设置参数名,用一个下划线(_)代替一个明确地参数名. --------重要---------- someFunction1() someFunction1(10) print(arithmeticMean(1,2,3,4,5)) // 调用函数传入可变参数 // 注意: 如果函数有一个或多个带默认值的参数,而且还有一个可变参数,那么把可变参数放在参数表的最后 print(arithmeticMean(3,8.25,18.75)) let originalString = "hello" let paddedString = alignRight(originalString,totalLength: 10,pad: "_") print(paddedString) // 输入输出函数 使用 var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) // 交换两个的值 print("someInt is now \(someInt) and antherInt is now \(anotherInt)") /* “注意: 输入输出参数和返回值是不一样的。上面的 swapTwoInts 函数并没有定义任何返回值,但仍然修改了 someInt 和 anotherInt 的值。输入输出参数是函数对函数体外产生影响的另一种方式。” */
// 指定外部参数名 可以在本地参数名钱指定外部参数名,中间以空格分割 func someFunction(externalParameterName localParameterName:Int) { } func sayHello(to person:String,and aanotherPerson:String) ->String { return "Hello \(person) and \(aanotherPerson)" } // 忽略外部参数名 func someFunction(firstParameterName:Int,_ secondParameTerName:Int) { } // 默认参数值 在函数体中为参数设置默认值 func someFunction1(parameterWithDefault:Int = 12 ) { print(parameterWithDefault) } // 可变参数 一个可变参数可以接受零个或多个值,函数调用时, 你可以用可变参数传入不确定数量的输入参数。通过在变量类型后面加入( ... )方式来定义可变参数。 /** 通过在变量类型后面加入( ... )方式来定义可变参数。 - parameter numbers: 传入参数 - returns: 返回参数的平均值 */ func arithmeticMean(numbers:Double...) ->Double { var total:Double = 0 for number in numbers { total += number } return total / Double(numbers.count) } // 常量参数和变量参数 默认声明的参数都是常量 通过在参数名前添加关键字 var 来定义变量参数: func alignRight(var string:String, totalLength:Int, pad:Character) ->String { let amountTopad = totalLength - string.characters.count if amountTopad < 1 { return string } let padString = String(pad) for _ in 1...amountTopad { string = padString + string } return string } // 输入输出参数 重要 // “如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。” // “你只能将变量作为输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加 & 符,表示这个值可以被函数修改。” // “注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记。” func swapTwoInts(inout a:Int, inout _ b:Int) { let temporaryA = a a = b b = temporaryA }
函数类型
// 调用 // 函数类型 每个函数都有种特定的函数类型, 由函数的参数类型和返回类型组装成 print(addTwoInts(10, 20)) print(multiplyTwoInts(1, 9)) printHelloWorld() // 使用函数类型 // 在Swift 中 使用函数类型就像使用其他类型一样。 例如,你可以定义一个类型为行数的常量或变量,并将函数赋值给他: var mathFunction:(Int,Int) ->Int = addTwoInts // “意思是 : 定义一个叫做mathFunction的常量,类型是‘一个有两个int 型的参数并返回一个 int 型的值得函数’,并让这个心变量只向 addTwoInts 函数” print("\(mathFunction(2,3))") // 有相同匹配类型的不同函数可以被赋值给同一个变量,就像非函数类型的变量一样: mathFunction = multiplyTwoInts print("\(mathFunction(2,3))") // 函数类型作为参数类型 ⭐️ // 你可以使用(int,int) -> int 这样的函数类型作为另一个函数的参数类型。这样你可以将函数的一部分时间交由给函数的调用者 // 下面例子 同样是输出某种数学运算结果: printMathResult(addTwoInts, 3, 5) // 函数类型作为返回类型 ⭐️ // 你可以用函数类型作为另一个函数的返回类型。你需要做的是在返回箭头( -> ) 后写一个完成的函数类型 // 下面的例子中定义了两个简单的函数,分别是 stepForward 和stepBackward. stepForward 函数返回一个比输入值大一的值。 stepBackward 函数返回一个比输入值小一的值。两个函数的类型都是 (int)-> int: var currentValue = 3 let moveNearerTozero = chooseStepFunction(currentValue > 0) print("\(moveNearerTozero(1))") print(" Counting to zero:") while currentValue != 0 { print("\(currentValue)...") currentValue = moveNearerTozero(currentValue) } print("zero1")
// 函数类型 func addTwoInts(a:Int,_ b:Int)->Int { return a + b } func multiplyTwoInts(a:Int,_ b:Int) ->Int{ return a*b } func printHelloWorld(){ } func printMathResult(mathFunction:(Int,Int)->Int,_ a:Int,_ b:Int) { print("Result : \(mathFunction(a,b))") } // 函数类型作为返回类型 func stepForward(input:Int) ->Int { return input + 1 } func stepBackward(input:Int)->Int { return input - 1 } func chooseStepFunction(backwards:Bool) ->(Int)->Int { return backwards ? stepBackward : stepForward }
嵌套函数
// 嵌套函数在本章中 你见到的所有函数都叫做全局函数, 他们定义在全局域中。 你也可以吧函数定义在别的函数体重。称作 嵌套函数 // 默认情况下 嵌套函数对外界是不可见的,但是可以被他们封闭函数来调用。 一个封闭函数也可以返回他的某一个嵌套函数,使得这个函数可以在其他域中被使用。 var currentValue1 = 4 let moveNearerTozero1 = chooseStepFunction1(currentValue1 > 0) print(moveNearerTozero1(1)) while currentValue1 != 0 { print("\(currentValue1)...") currentValue1 = moveNearerTozero1(currentValue1) } print("zero!")
// 嵌套函数 func chooseStepFunction1(backwards:Bool) ->Int ->Int { func stepForward(input:Int) ->Int {return input + 1} func stepBackward(input:Int) ->Int {return input - 1} return backwards ? stepBackward : stepForward }
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究