zoukankan      html  css  js  c++  java
  • Swift新手教程系列5-函数+selector在swift中的使用方法

    原创blog。转载请注明出处

    近期在用swift写代码,尽管遇到一些问题,可是代码量确实减了不少。

    swfit新手教程系列会随着我使用swfit中的积累,不断地去修正更新

    之前的教程

    swift单例模式具体解释-线程安全,多核性能

    swift新手教程4-集合(Array,Dictionary)

    swift新手教程3-字符串String

    swift新手教程2-运算符

    swift新手教程1-准备知识

    在swift中,函数有keywordfunc声明
    格式
    func 函数名(參数1,參数2,...)->返回值{

    }

    func firstFunction()->Int{
    	var result = 4
    	return result
    }
    println(firstFunction())//调用
    參数为空,返回值为Int

    在Swift中,函数能够有随意类型的參数。由于Swift定义函数本身是一种类型,所以函数本身也能够返回
    函数,或者一个函数作为还有一个函数的參数
    一、常见的使用函数方式
    1、无參数,返回值为空
    没有返回值的时候->能够省略
    func hwcFunction(){
    	println("Hello hwc")
    }

    2、多个參数。返回值唯一
    func hwcFunction(first:String,second:String)->String{
    	return first+second
    }
    println(hwcFunction("hello","hwc"))

    3、多个參数,多个返回值
    在Swift中。多个返回值经常使用元组来返回
    func hwcSwapString(first:String,second:String)->(String,String){
    	return (second,first)
    }
    var (second,first) = hwcSwapString("first","second")


    二、外部參数
    从上面的样例中,我们发现,使用的时候我们并没有看到參数的信息。就是我们并不知道第一个參数是什
    么意思,第二个參数是什么意思。

    外部參数能够完美解决问题
    我们来举个样例

    func addPersonalInformation(Name:String,Sex:String)->String{
    	return Name+":"+Sex
    }
    addPersonalInformation("WenchenHuang","Male")

    比方输入WenchenHuang Male则返回WenchenHuang:Male.
    可是,因为没有提示信息,我并不知道第一个參数是代表名字。第二个參数代表性别。这时候能够用外部
    參数
    func addPersonalInformation(name Name:String,sex Sex:String)->String{
    	return Name+":"+Sex
    }
    addPersonalInformation(name:"WenchenHuang",sex:"Male")

    调用的时候一目了然,知道哪一个參数代表什么意思
    可是这样写仍然比較麻烦。我们不得不为同一个參数提供内部和外部两个名字
    Swift为我们提供了一种简写外部參数的方式
    仅仅须要在内部參数前加上前缀,内部參数在调用的时候会体现
    func addPersonalInformation(#name:String,#sex:String)->String{
    	return name+":"+sex
    }
    addPersonalInformation(name:"WenchenHuang",sex:"Male")


    三、默认參数与变量參数
    默认參数就是对參数有个默认值。在函数调用的时候。能够给这个參数传值。也能够不传,不传的时候使
    用默认值
    举个简单的样例
    func hwcPrint(toPrint:Int = 10){
    	println(toPrint)
    }

    调用的时候
    hwcPrint()//输出10
    hwcPrint(toPrint:11)//输出11
    这里,我们不难看出,在调用的时候swift自己主动为我们生成了一个外部參数的名称
    这是swift的一个特点:默认參数生成一个外部參数名称

    能够使用下划线作为默认參数的外币名称,这样swfit不会提供外部參数名称。但不建议这么做


    变量參数
    在swift中,函数传入的參数本身是常量。在函数中不能改变。假设想要让该參数作为可改动的副本。则添
    加var
    注意:一个函数最多仅仅能有一个可变參数,且必须为最后一个,为了降低内容歧义

    比如:
    func hwcPrint(toPrint:Int){
    	toPrint = toPrint+1//Wrong
    	println(toPrint)
    }
    func hwcPrint(var toPrint:Int){
    	toPrint = toPrint+1//Right
    	println(toPrint)
    }

    四、可变參数
    所谓可变參数。就是想非常多脚本语言那样。參数个数不明白,而在函数体内部,參数保存在一个数组里
    可变參数用...表示
    举个样例
    func addMultiString(toPrint:String...)->String{
    	var resultString:String = ""
    	for tempString in toPrint{
    	  resultString+=tempString
    	}
    	return resultString
    }
    var result1 = addMultiString("hello","world")
    var result2 = addMultiString("Wen","chen","Huang")

    五、输入输出參数inout

    这类參数传入原值得引用。函数内对传入參数的操作会改变原始值,传入引用的时候须要使用&

    func addOne(inout input:Int){
    	++input
    }
    var test1 = 10
    addOne(&test1)//test1 = 11
    func addOne(var input:Int){
    	++input
    }
    var test2 = 10
    addOne(test3)//test2 = 10

    六、函数类型
    前面提到过,在swift中函数本身就是一个类型,类似于C语言中的函数指针
    BTW:函数类型的理解对后面闭包的理解非常重要
    比如:上面的函数func addOne(input:Int)
    函数类型就是(Int)->()
    所以。我们能够像其它类型一样使用函数类型
    var add:(Int,Int)->Int 声明一个入口參数是Int,Int返回值是Int的函数类型变量add

    相同。函数类型也能够作为參数传递给函数
    func addThree(addTwo:(Int,Int)->Int,thrid:Int)->Int{
    	return addTwo+thrid
    }

    函数类型也能够作为返回值
    这里採用Apple官方文档里的说明:
    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 } let moveNearerToZero = chooseStepFunction(currentValue > 0)



    七、函数嵌套
    何为函数嵌套,就是在函数里定义函数,默认嵌套的函数对外不可见。可是可在函数内部调用。
    对上面函数进行重写
    func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
    	func stepForward(input: Int) -> Int {
    	return input + 1
    	} 
    	func stepBackward(input: Int) -> Int {
    	return input - 1
    	}
    
    
    return backwards ? stepBackward : stepForward
    }
    


    八、Selector
    在swift中,建议不在使用selector。由于其不是类型安全的。可是对于熟悉Objective-C的程序猿同学来说。非常多方法讲不能调用。对此。swift对objective-C的selector直接传入函数名
    myButton.addTarget(self, action: "buttonTapped:", forControlEvents: .TouchUpInside)
    let timer = NSTimer(timeInterval: 1, target: self, selector: "test", userInfo: nil, repeats: false)
    func test{
    //Do something
    }
    function buttonTapped(sendr:AnyObject){
    //Do something
    }




  • 相关阅读:
    首次调用u8api遇到的问题总结
    为datagridview添加自定义按钮
    我对数据库索引的初步了解
    ObjectARX 常见编译错误解决方式记录
    手动修改Visual Studio 版本互转工具
    [经验] FAS 20号指令的深入研究
    Object ARX 统一设置所有图层的RGB颜色
    ARX 选择集获得所有图形 遍历 实例 备忘
    ObjectARX2010 学习笔记002:读取已经存在的DWG文件中的内容
    利用编译时的全局声明对抗反编译
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6850390.html
Copyright © 2011-2022 走看看