Swift Function函数

来源:互联网 发布:java 多张图片 合成 编辑:程序博客网 时间:2024/06/14 16:15

一天一步,扎实前进

函数

简单的说,函数的存在就是让程序的可读性,维护性以及复用度得到提高.这是每种语言都存在的,只不过有的叫方法,有的叫函数而已.

不多说了,Code+注释就明白了

////  ViewController.swift//  Function////  Created by NapoleonBai on 14-11-21.//  Copyright (c) 2014年 NapoleonBai. All rights reserved.//import UIKitclass ViewController: UIViewController {    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.        self.main()    }    func main(){        //其实之前的讲解中,也使用过函数定义,也简单提过        //正如同这样,定义一个main函数,使用关键字func        /*        注意:Swift中的函数也是先声明,再使用的,否则会编译通不过直接抛出错误        定义函数格式:            func funcName(){}       //简单函数            func funcName(parmasName:type,parmasName:type...){} //带参数的函数            func funcName(parmasName:type) ->returnType { ... return returnType}      //带有返回值的函数        基本上就这样,不停的不断地组合,跟其他语言都是一样的        */                //那怎么调用函数呢?其实之前已经用过,只是没有单独提出来说明一下        //eg:        var flag = isEmpty("Napoleon") //the flag = true        //这里调用函数,调用直接采用调函数名就好,因为是当前类中,当然,也可以写self.methodName()                //那么,函数的返回值有什么要求呢?        //eg:        var userInfos = userInfo("小白杨")                println("userInfos values = \(userInfos.0) and "+userInfos.1)   //userInfos values = 99 and 熊猫血                //这里的话,可以看到,返回一个元组类型的数据也是没有问题的,可能很多时候会出现返回一个数组/集合/字典类型的数据,那是不是也可以呢?                var array = getData()                for temp in array{            println("the temp value = \(temp)")            /*            the temp value = value1            the temp value = value2            the temp value = value3            the temp value = value4            */        }        //上面也看过了怎么返回一个数组,        //当然了,返回一个字典类型的数据也是如此了,其实函数这个功能和OC差不多,只不过表现形式不同罢了,不然我们看看其他        //eg:        setUserInfo(setUserName: "NapoleonBai", setUserAge: 23)        //更加语义化的参数说明                //当然,这样实现也有两种方法,serUserInfo函数是一种,然后另一种请看        //eg:        setBookInfo(setBookName: "happy Swift", setBookPrice: 99.9)                //谈谈可变形参的函数        //当然了,形参就不用多说了吧:简单地说就是定义函数的时候()中的参数        //eg:        setPrice(23.3,24.5,22.6,35.7)   //这个括号中,可以传任意个浮点类型值,这就是可变参数的神奇之处                //注意:        /*        Swift语言中得形参默认是常量,意思就是说,在函数体内部,我们是不能改变参数的值的.也就是说函数的形参默认是指类型的.但是        如果需要在函数体内部修改参数,那又该怎么做呢?        */                //eg:        updateParmas("NapoleonBai",age: 23)        //这里的age是一个变量参数                //上面也说过,形参只是按值传递的,就算修改了参数的值,那么实参的值还是没有办法修改,那这个操作能不能实现呢?        //所谓实参:比如上面的23,就是一个实参,当然了,开发中,这肯定是一个有名称的变量,所以,如果我们要在函数体中修改传入的形参来达到修改这个变量的值,那我们继续往下看        //好吧,我们再来谈谈        //eg:        var name = "小白杨"        //name = "小白杨"        updateAll(&name)                println("the name = \(name)")   //the name = NapoleonBai        //是不是很神奇,达到要求了吧,嘻嘻                //原因就是我们使用了关键字:inout,这样传入的就是地址了,从而达到修改实参的目的        /*        注意:            inout标记的参数,不能传常量和字面量(上面的23这样的)            不能同时将形参标记为let,var,inout            可变参数不能标记为inout            函数不能有默认值        */        //嵌套函数        //eg:        var temp = outFunction("<hello swfit>", price: 23)        println(temp)   //a <hello swfit> book need $46    }    //嵌套函数    func outFunction(name : String,price : Int) ->String{                func inFunction(isPrice : Int)->String{            return String(isPrice * 2)        }        var temp = inFunction(price)                return "a "+name+" book need $"+temp    }        //修改形参实现修改实参,使用inout关键字    func updateAll(inout Name : String){        Name = "NapoleonBai"    }            //尝试更改参数值    func updateParmas(name : String,var age : Int){        //name = "小白杨"    //error:Cannot assign to 'let' value 'name' 不可修改        age = 33    //可修改    }            //可变形参函数    //一个函数只允许一个可变参数,通过' ... '来实现,而且这个可变参数必须放置在最后面    func setPrice(price : Float ...){        for priceTemp in price{            println("the priceTemp = \(priceTemp)")            //通过循环来获取可变参数值            /*            the priceTemp = 23.3            the priceTemp = 24.5            the priceTemp = 22.6            the priceTemp = 35.7            */        }    }        //这个函数就可以看出,setUserName和setUserAge本来就没有什么特殊意义,就是类似于说明文字一样,跟OC中的功能一样吧    func setUserInfo(setUserName userName : String,setUserAge age :Int){        }    //这样也可以实现上面的那种显示功能,只是简化了重复命名而已,别无其他    func setBookInfo(#setBookName : String , setBookPrice : Float){        }        //返回一个数组    func getData() -> Array<String>{        //这里也补充说明一下,数组这样声明其实是最正式的声明方式        //在声明的时候就指定参数类型,然后按照类型进行添加        var arrays = Array<String>()        arrays.append("value1")        arrays.append("value2")        arrays.append("value3")        arrays.append("value4")        return arrays    }            //返回一个元组类型    func userInfo(userName : String) ->(Int,String){        if userName == "NapoleonBai"{            return (23,"A型血")        }else{            return (99,"熊猫血")        }    }        //创建一个有参数,有返回值函数    func isEmpty(str : String) ->Bool{        if str.isEmpty{            return true        }else{            return false        }            }                override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }}

当然了,里面也不是说的很完整,不过基础带过了就好了...嘻嘻

有什么问题,大家可以一起讨论哟...

独乐了不如众乐乐...come on!

0 0
原创粉丝点击