Swift_函数(Function)

原创 2015年11月18日 21:19:36

函数(Function)

Swift中的函数,就相当于OC中的方法。但是语法上变化的地方很多,并且还增加了OC中没有的功能,下面详细介绍:

函数类型

无参数、无返回值

// func          : 函数标志
// function1     : 函数名
// ()            : 小括号内部放参数类型
// Void          : 返回值类型
func function1() -> Void {
    print("这是一个无参数无返回值的函数")
}

// 返回值Void可以省略,这种写法更加的方便,建议这种
func function2() {
    print("这是一个无参数无返回值的函数")
}

有参数、无返回值

// 有参数、无返回值
func printInt(a: Int) {
    print(a)
}

// 多个参数,无返回值
func printText(a: Int, b: Float, c: String) {
    print("\(a) \(b) \(c)")
}

无参数、有返回值

// 无参数、有一个返回值
func PI() -> Double {
    return 3.14
}

// 使用元组,实现多个返回值
func notFoundMsg() -> (Int, String) {
    return (404,  "Not Found")
}

有参数、有返回值

// 有两个Int参数、有一个Int返回值
func sumValue(a: Int, b: Int) -> Int {
    return a + b
}

// 有两个Int参数,有两个Int返回值
func sumAndDiffValue(a: Int, b: Int) -> (Int, Int) {
    return (a + b, a - b)
}

// 有一个数组类型参数,有两个Int类型参数
func maxAndMinValue(array: [Int]) -> (min: Int, max: Int) {
    var minValue = array[0]
    var maxValue = array[0]

    for value in array {
        if value < minValue {
            minValue = value
        } else if value > maxValue {
            maxValue = value
        }
    }

    return (minValue, maxValue)
}

// 函数调用,传递数组参数
let res = maxAndMinValue([10, 34, 23, 56, 23])
// 打印结果内容
print("\(res.min) \(res.max)")
// 打印结果: 10  56


内部参数名、外部参数名

函数的参数名,是方便我们对参数的理解,一个好的参数名可以提高我们的代码质量。
在Swift语言中,参数名可以分为内部参数名外部参数名。很简单,内部参数名就是在函数内部使用的名字,而外部参数名,就在在函数调用的时候显示的名字。

默认参数名

// 函数名常用写法
func funcNames(name: String, age: Int, height: Float) {
    print("\(name) \(age) \(height)")
}

// 函数调用,显示: age / height,不显示: name
funcNames("李大泽", age: 18, height: 20)
// 默认情况下,函数的第一个参数,不显示外部参数名,其它参数外部参数名和内部参数名一样,并显示

写全内部参数名和外部参数名

// 手动添加外部参数名
// 如下: 
//      withName、withAge、withHeight是外部参数名,只能在函数调用的时候显示
//      name、age、height是内部参数名,只能在函数内部使用
func funcNames1(withName name: String, withAge age: Int, withHeight height: Float) {
    print("\(name) \(age) \(height)")
}

// 函数调用,显示:withName / withAge / withHeight
funcNames1(withName: "lidaze", withAge: 18, withHeight: 180)

隐藏掉外部参数名

在Swift中,如果需要忽略掉内容的话,请使用_符号,参数名也一样。 

// 隐藏掉外部参数名  
func funcNames2(name: String, _ age: Int, _ height: Float) {
    print("\(name) \(age) \(height)")
}
funcNames2("lidaze", 18, 180.0)

如果把参数名都省略掉得话,对于我们阅读代码增加的困难,不建议省略


可变、不可变参数

Swift中,在函数内部,默认是禁止对参数的值进行修改的,但是我们通过增加一些标识,可以实现参数的修改,详情如下: 

不可变参数

// 不可变参数
func notChangeParam1(let a: Int) {
    // 下面的代码报错
//    a = 10
}

// 参数是否可变默认是let,和上面写法一样
func notChangeParam2(a: Int) {
    // 下面的代码报错
//    a = 10
}

可变参数

当我们想要修改参数的值的时候,我们可以使用var修饰参数,注意,这样修改参数的值,并不影响实参的值。 

// 参数值可修改
func changeParam(var a: Int) {
    print(a)
    a = 10
    print(a)
}
// 如果想要修改参数的话,需要在函数定义的时候将参数设置成var类型,默认是let,不允许修改参数


输入、输出参数

大家都知道,在函数内部修改了参数,实参的值是不会发生改变的。那如果我们想要外部参数值改变呢?请使用inout参数

// 输入输出参数
func inoutParamFunc(inout a: Int) {
    a += 10
}

var num = 20
inoutParamFunc(&num)
print("num = \(num)")
// 30

如果参数使用inout关键字修饰的话,在函数内部修改参数的值,会影响到外部参数的值。类似于C语言中传递了参数的地址,然后利用地址修改了参数的值


默认参数值

在Swift中,我们调用函数的时候,有参数的函数我们也可以不传递参数,因为参数可以拥有默认值,如下: 

// 默认参数值
func defaultParam(a: Int = 12) {
    print(a)
}
defaultParam()
// 打印结果: 12
defaultParam(20)
// 打印结果: 20


可变参数

在Swift中,实现任意数量的参数是非常容易的一件事情,但是请注意,一个函数只允许一个可变数量的参数 

// 可变参数
func moreParams(numbers: Int...) {
    for number in numbers {
        print(number)
    }
}
moreParams(10, 20, 34, 24, 56, 24)
// 打印: 10, 20, 34, 24, 56, 24

每个函数,最多允许一个可变参数


嵌套函数

// 嵌套函数
func chooseFunc(a: Int, b: Int, funcName: String) -> Int {

    // 在Swift中,可以在函数内部声明函数
    func sum(a: Int, b: Int) -> Int {
        return a + b
    }

    func diff(a: Int, b: Int) -> Int {
        return a - b
    }

    if funcName == "sum" {
        return sum(a, b: b)
    } else {
        return diff(a, b: b)
    }
}
chooseFunc(10, b: 20, funcName: "sum")

函数嵌套的层级是无限制的,但是不建议很多

版权声明:本文为博主原创文章,未经博主允许不得转载。

初学Swift_函数

/* 函数  函数的定义和调用  */ /**  打招呼函数    - parameter personName: 姓名(参数)   ...
  • zhangchunxinzcx
  • zhangchunxinzcx
  • 2016年06月30日 16:18
  • 141

function Function函数

函数是由事件驱动的或者当它被调用时可执行的可重复使用的代码块 JavaScript函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词Function: function functio...
  • yana_loo
  • yana_loo
  • 2016年11月21日 05:45
  • 1380

Swift_继承

/**  *  继承  */ //父类(超类) class Vehicle {     var currentSpeed = 0.0     var descr...
  • zhangchunxinzcx
  • zhangchunxinzcx
  • 2016年10月15日 16:09
  • 121

Swift_学习笔记_控制语句和函数

控制语句分支结构if语句switch语句区间匹配var age = 1000 switch age { case 0...3: print("3岁以下儿童") case 3...12: ...
  • FlyingKuiKui
  • FlyingKuiKui
  • 2017年08月08日 15:15
  • 191

js 函数与表达式-- (function(){...})() 与 (function(){...}())有没有区别

答案是没有区别 你需要明白 IIFE 的原理,我简单说一下:function foo() {...} // 这是定义,Declaration;定义只是让解释器知道其存在,但是不会运行。foo...
  • fengzijinliang
  • fengzijinliang
  • 2016年11月14日 11:00
  • 855

.net中函数Function的用法

void Page_Load() { DateTime DueDate; DateTime CheckOutDate; CheckOutDate = DateTime.Now; DueDate =...
  • web718
  • web718
  • 2005年03月16日 12:58
  • 2575

JavaScript 中定义函数时用 var foo = function () {} 和 function foo() 的区别

作者:严肃 链接:https://www.zhihu.com/question/19878052/answer/32361868 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业...
  • u013766398
  • u013766398
  • 2016年06月23日 17:29
  • 1475

matlab中s-function函数的使用

s-function也就是system-function的缩写。说得简单,s-function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。   ...
  • dm12mail
  • dm12mail
  • 2017年03月27日 19:00
  • 7377

javascript中function前面加(/!/+/-/~的含义

自执行匿名函数 常见格式:(function(){ /* code */ })(); 解释:包围函数(function(){ /* code */ })的第一对括号向脚本返回未命名的函数,随后一对空括...
  • wjnf012
  • wjnf012
  • 2017年04月13日 14:49
  • 1352

sqlserver创建函数的实例(create function)

CREATE FUNCTION  名称(@ID VARCHAR(10))RETURNS varchar(8000)ASBEGIN declare @i int,@ret varchar(8000)  ...
  • xwnxwn
  • xwnxwn
  • 2011年01月16日 18:00
  • 4367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift_函数(Function)
举报原因:
原因补充:

(最多只允许输入30个字)