首页 > 代码库 > Swift学习笔记(二)参数类型

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别。通过这两天的学习,算是捡回了漏掉的知识。

在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明。

但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号“&”进行传递。

上面呢,主要是个人在学习过程中的一点概括性的东西。具体的内容,就直接看代码了,而且代码里的注释也是相当清晰地\(^o^)/~

 func sayHello(name:String)->String
        {
            return "Hello "+name+" !";
        }
        
        sayHello("wangyi")
        
        println(sayHello("wangyi"))
        
        
        //统计元音字母 和辅音字母的数量
        func count(string:String)->(vowels: Int,consonants:Int,others:Int){
            var vowels=0,consonants=0,others=0
            for character in string{
                
                switch String(character).lowercaseString{
                case "a","e","i","o","u":
                    vowels++
                case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":
                    consonants++
                default:
                    others++
                }
            }
            
            return (vowels,consonants,others)
        }
        
        println(count("hello world"))
        
        let total=count("some arbitrary string ")
        println("\(total.vowels) .vowels \(total.consonants) .consonants \(total.others) others")
        
        //外部参数名称
        //添加外部形参名称后,在调用函数时,阅读起来不至于茫然,知道每个参数代表什么意思
        func someFunction(externalParameterName localParamerName :Int)
        {
            println("localParamerName:\(localParamerName)");
        }
        someFunction(externalParameterName:5)
        
        //外部形参速记
        //在形参前添加“#”,即可快速替代外部形参名称,系统会自动补充与本地形参名称相同的外部形参
        func constainsCharacter(#string: String,#characterToFind:Character)->Bool
        {
            var result=false
            for character in string {
                if character == characterToFind{
                    result = true
                }
                else{
                    result = false
                }
            }
            return result
        }
        
        let constainsAVee=constainsCharacter(string: "aardvark", characterToFind: "k")
        println("constainsAvee:\(constainsAVee)")
        
        
        //默认形参值
        func join(string s1:String, toString s2:String, withJoiner joiner:String=" ")->String
        {
            return s1+joiner+s2
        }
        
        join(string:"hello",toString:"world" ,withJoiner:"-")
        //当有默认形参值后,在函数调用过程中,如果不给默认形参值赋值,则使用默认形参值
        println(join(string: "hello", toString: "world"))
        
        //调用时,则显示实参所代表的值
        println(join(string: "hello", toString: "world", withJoiner: "--"))
        
        //有默认值的形参,系统会自动添加与本地形参名一样的外部形参名
        func joinWithOutExterenParamerter(s1:String,s2:String,joiner:String=" ")
        {
            //形参默认是常量let型,赋值会导致编译错误
//            s1="asdf"
            println("\(s1)+\(joiner)+\(s2)")
        }
        
        joinWithOutExterenParamerter("hello","world",joiner:"~~~~")
        
        
        //可变形参
        //传递至可变形参的值在函数主体内是以适当类型的数组存在的
        func arithmeticMean(numbers:Double...)->Double
        {
            var total:Double=0
            for number in numbers
            {
                total+=number
            }
            
            //在函数体内就作为名为 numbers 类型为 Double[]的常量数组
            return total/Double(numbers.count )
        }
        
        println( arithmeticMean(1,2,3,4,5))
        
        
        //常量形参和变量形参
        //形参默认是常量,在做域内修改的话,会导致错误
        //如果要对形参的值进行修改,可以将其声明为变量类型
        //变量形参是变量,并给函数一个可修改的形参值副本 并不会导致传递过来的形参值发生改变
        func alignRight(var string:String,count:Int ,pad:Character)->String
        {
            let amountToPad=count-countElements(string)
            
            for _ in 1...amountToPad{
                string=pad+string
            }
            
            println("string:\(string)")
            return string
        }
        
        let originalString = "hello"
        let paddedString=alignRight(originalString,10,"-")
        
        //形参的值不会改变 改变的只是副本
        println("originString:\(originalString)")
        println("paddedString:\(paddedString)")
        
        
        //in-out形参
        //改变形参后,想在函数调用后继续保持形参值得改变,在变量前添加in-out即可
        //实参必须为变量,因为常量和字面量不能修改
        //在进行参数传递过程中,需要在实参前添加“&”符号
        func swapTwoInts(inout a:Int,inout b:Int)
        {
            let temporaryA=a;
            a=b;
            b=temporaryA
        }
        
        var someInt=3,anotherInt=5
        swapTwoInts(&someInt, &anotherInt)
        println("someInt:\(someInt)  anotherInt:\(anotherInt)")

其实仔细阅读《The Swift Programming Language》一书的同学都知道,都是书上的例子,如果有那块看的还不是太清楚的话,可以继续探讨学习哦\(^o^)/~

令附上demo:http://download.csdn.net/detail/jidiao/7512153