iOS经典讲解之Swift函数详解(一)

来源:互联网 发布:淘宝联盟怎么合并付款 编辑:程序博客网 时间:2024/06/04 18:57

作者:Loving_iOS

转载请标明出处:http://blog.csdn.net/loving_ios/article/details/49365233

本次讲解的开发环境为Xcode7.0.1 创建playground文件,进行的代码编写。

//***********************函数*************************/* 函数 语法格式: func 函数名(参数列表)—>返回值类型{               函数实现...}*/// 无参 无返回值func func1() {    print("hello")}func func2() -> Void {    print("hello")} // 和上面等价// 函数调用func1()func2()// 有参// 1.关于内部参数名 只在函数作用域内部使用func func3(name:String, age:Int) {        print("name= \(name) age = \(age)")}// func3(<#T##name: String##String#>, age: <#T##Int#>)  除了第一个参数 其他参数 在调用时会自动生成 与参数名相同的外部参数名// 原则上在定义函数时第一个参数的外部变量名应该写在函数名后面 如://func func3Name(name:String, age:Int)func3("Bob", age: 18)// 除了上面的方式外 函数参数的外部参数名可以自己添加 添加规则: 在内部参数名前面添加 用空格隔开func func4(mingzi name:String, nianling age:Int) {    print("name= \(name) age = \(age)")}func4(mingzi: "Tom", nianling: 20)// 使用占位符 _省略掉外部参数名func func5(name:String, _ age:Int) {    print("name= \(name) age = \(age)")}func5("john", 20)// 可以给函数的参数赋初值func func6(name:String = "jack", age:Int = 12) {    print("name= \(name) age = \(age)")}// 在调用时注意//1.不传参数则使用初值// func6()// 2.传一个参数则替换掉第一个参数的初值//func6("mary")// 3.可以指定修改那个参数func6(age: 20)// 有返回值的时候func func7() -> String {    return "你好"}func7()// 不确定参数个数func func8(numbers:Int...) -> Int {    var sum = 0    for number in numbers {        sum += number    }    return sum    }func8(2, 4, 5)// 参数在函数体内默认是不变的 用var修饰后可变func func9(var num1:Int, num2:Int) -> Int {        num1 += num2    return num1}func9(1, num2: 3)// inout修饰参数 将外部变量的地址传过来 从而改变外部变量的值func func10(inout num:Int) {    num++}var number2 = 10func10(&number2)number2// 练习:给一个字符串返回元音和辅音的个数func count(tempString:String) -> (Int, Int) {        var num1 = 0    var num2 = 0    for charStr in tempString.characters {                switch charStr        {            case "a", "e", "i", "o", "u":            num1++        default:            num2++                    }    }        return (num1, num2)}count("hfejflekf")// 函数嵌套:函数作用域内定义了另外一个函数 内层函数的作用域内可以使用外层函数的参数func function(var number:Int) {    number++    func function1() {                number++    }        function1()    number        }function(3)// 返回类型为函数类型func function2() -> ((Int)->String) {            func hanshu(num:Int) -> String {                return "num = \(num)"    }        return hanshu // 只写返回的函数名}let hanshu = function2()hanshu(2)//练习: 声明一个函数 实现功能:传入“+”“-”“*”“/”字符串返回对应运算函数:如传入"+" 返回 int + int = int// 方法一:func operators(str:String) -> ((Int, Int) -> Int)? {        func add(num1:Int, num2:Int) ->Int {                return num1 + num2    }        func minus(num1:Int, num2:Int) ->Int {                return num1 - num2    }        func mult(num1:Int, num2:Int) ->Int {                return num1 * num2    }        func div(num1:Int, num2:Int) ->Int {        return num1 / num2    }        switch str    {                case "+":        return add        case "-":        return minus        case "*":        return mult        case "/":        return div    default:        return nil    }  }let addFunction = operators("+")addFunction!(2, 3) // 使用可选类型 使用时要解包let minusFunction = operators("-")minusFunction!(3, 2)let multFunction = operators("*")multFunction!(2, 3)let divFuncton = operators("/")divFuncton!(3, 2)// 方法二:func operations(str:String) -> ((Int, Int) ->Int)? {        func operation(num1:Int, num2:Int) -> Int {                        switch str        {                        case "+":            return num1 + num2            case "-":            return num1 - num2            case "*":            return num1 * num2            case "/":            return num1 / num2        default:            return 0                    }           }        return operation    }// 方法一和方法二的运算结果没有区别 注意:函数返回值为函数时可以用函数嵌套实现,但不是必须使用函数嵌套。方法一可以将内层函数放在外面一样可以,因为内层的函数没有使用外层函数的参数,而方法二必须嵌套,因为内层函数用了外层函数的参数// 可以给函数类型起别名typealias funcType = (Int, Int) ->Intfunc function3() -> funcType {            func function(num1:Int, num2:Int) ->Int {                return num1 + num2            }        return function}


1 0
原创粉丝点击