Swift2-0基础_Functions(函数)

import Foundation

// 函数的定义与调用
// func 函数前缀
// personName:String 形参:参数类型
// ->String 函数返回值类型
func sayHello(personName:String)->String {
    return "Hello," + personName + "!"
}
print(sayHello("Kermit"))

// swift支持函数重载
func sayHello(hello:String) {
    print(hello)
}

// 无参函数
func sayNiHao() -> String {
    return "你好"
}
print(sayNiHao())

// 多参数
func halfOpenRangeLength(start:Int,end:Int)->Int {
    return end - start
}
print(halfOpenRangeLength(1, end: 10));

// 无返回值
func ABC(abc:String) {
    print("\(abc)")
}
ABC("啦啦啦啦")

// 返回值可以被忽略
func test1(str:String) -> Int {
    print(str)
    return 1
}
func test2(str:String) {
    test1("a")
}

// 多返回值
func count(string:String)->(one:Int,two:Int,three:Int) {
    var currentOne = 1, currentTwo = 1, currentThree = 1
    currentOne = 1
    currentTwo = 2
    currentThree = 3
    return(currentOne,currentTwo,currentThree)
}

// 函数参数名称  外部参数  局部参数
// 函数的外部参数名 外部参数名写在局部参数名之前,用空格分隔
// 函数的使用者在调用函数时,必须使用提供的参数名字
func someFunction(externalParameterName localParameterName:Int) {
    
}
someFunction(externalParameterName: 5)

func join(string s1:String,toString s2:String,withJoiner joiner:String)->String {
    return s1 + joiner + s2
}
join(string: "say", toString: "hello", withJoiner: ":")

// 忽略外部参数
// 如果不想为第二个及后续的参数设置外部参数名,用一个下划线( _ )代替一个明确的参数名
func join2(string s1:String, _ secondStr:String) {
    
}
join2(string: "first", "second")

// Optional返回值类型 函数不一定有返回值类型
func testOptional(string:String)->String? {
    return "null"
}

// 默认参数值,默认参数要放在参数列表的最后
func defaultNum(parameterWithDefault:Int = 8) {
    
}
defaultNum()    // 8
defaultNum(10// 10

// 可变参数 可以接收多个参数
// 接收0个或多个参数,并且如果有可变参数,这个参数必须要写在参数列表的最后(即使有默认参数,默认参数--可变参数,一个函数最多只能有一个可变参数。
func arithmentMean(numbers:Double...) -> Double {
    var total = 0.0;
    for number in numbers {
        total += number
    }
    return total / Double (numbers.count)
}
arithmentMean(1,2,3,4,5)
arithmentMean(1,2,3)

// 常量参数和变量参数
// 函数参数默认是常量,在函数体中改变参数的值会报错
// 要想在函数内部修改参数值,就需要手动声明为变量类型
func alignRight(var str:String,count:Int,pad:String) -> String {
    let amoutToPad = ["a","b"]
    
    for _ in amoutToPad {
        str = pad + str
    }
    return str
}

// 输入输出参数
// 输入输出参数不能有默认值,而且可变参数不能用标记。如果你用标记一个参数,这个参数不能被或者标记
func swap(inout a:Int,inout b:Int) {
    let tmp = a
    a = b
    b = tmp
}

var first = 3
var second = 4
swap(&first, b: &second)

// 函数类型
func addTwoInts(first:Int,second:Int) -> Int {
    return first + second
}
func mutiplyTwoInts(first:Int,second:Int) -> Int {
    return first * second
}
// 使用函数类型
var mathFunction:(Int,Int) -> Int = addTwoInts
print(mathFunction(1,2))
mathFunction = mutiplyTwoInts

// 函数类型作为参数类型
func printMathResult(mathFunction:(Int,Int) -> Int,first:Int,second:Int) {     print ("result:\(mathFunction(first,second))") } printMathResult(addTwoInts, first: 3, second: 5) printMathResult(mutiplyTwoInts, first: 3, second: 5) //  函数类型作为返回类型 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 currentValue = 3 let moveNearerToZero = chooseStepFunction(currentValue > 0) // 函数嵌套,在COC 中不可以 func newChooseStepFunction(backwards:Bool) -> ((Int) -> Int) {          func stepForward(input:Int) -> Int {
        return input + 1
    }
    func stepBackward(input:Int) -> Int {
        return input - 1
    }
    return backwards ? stepBackward : stepForward
}

你可能感兴趣的:(ios,函数,swift)