swift:入门知识之函数与闭包

简介:

1、swift中使用关键字func来声明和定义一个函数。调用函数使用它的名字加上小括号中的参数列表。

2、swift使用->方向符号分隔参数的名字和返回值类型

3、swift使用元组(tuple)来返回多个值

4、函数可以接收可变参数个数,手机到一个数组中

5、函数可以嵌套。内嵌函数可以访问其定义的所在函数的变量。使用内嵌函数组织代码,可以避免过长和过于复杂

6、函数是第一类型的,这意味着函数可以作为返回值返回

7、函数还可以作为另一个函数的参数使用

8、闭包,闭包相当于一个匿名函数(匿名函数做函数的参数),所有传函数参数的地方都可以使用闭包

 

9、有时当你调用一个函数将每个形参进行命名是非常有用的,以表明你把每个实参传递给函数的目的。此时,可以为参数设置外部形参名。 

具体举例如下:

定义一个有参数的函数,返回值为Int型函数,使用->类型来返回值

复制代码
//定义一个有参数的函数
func sum(a:Int,b:Int)->Int{
    return a+b
}
//函数调用
sum(10, 20) //30
复制代码

使用元组来返回多个值,通过元组名.0获取第一个值,剩下的值依次可以获取

复制代码
//使用元组来返回多个值的函数
func getGasprices()->(Double,Double,Double){
    return (1.0,2.0,3.0)
}
//函数调用
getGasprices()   //(.0 1.0, .1 2.0, .2 3.0)
复制代码

通过一个类型...的方式定义可变参数的函数,参数个数根据你调用函数时传递的参数而定

复制代码
//定义可变参数的函数
func sumOfArr(numbers:Int...)->Int{
    var sum = 0
    for temp in numbers{
        sum += temp
    }
    return sum
}
//函数调用
sumOfArr(2,4,6,1,7,8) //28
复制代码

在函数内部嵌套定义另一个函数

复制代码
//函数内部嵌套定义函数
func returnFunc()->Int{
    var y = 10
    func add(){
        y += 5
    }
    add()
    return y
}
//函数调用
returnFunc()    //15
复制代码

可以将函数作为一个返回值返回

复制代码
//从函数内部函数返回一个函数
func makeIncrement()->(Int->Int){
    func addOne(number: Int)->Int {
        return 1 + number
    }
    return addOne
}
//接收一个返回的addOne函数
var increment = makeIncrement()

//调用这个返回的函数
increment(7)   //8
复制代码

函数可以作为参数使用

复制代码
//函数做参数使用
func search(Array:[Int],Condition:Int->Bool)->Bool{
    for num in Array{
       if Condition(num){
          return true
       }
    }
    return false
}
func equalTen(num:Int)->Bool{
    return num == 10
}
var arr:[Int] = [23,15,7,9,10]

//将equalTen函数作为search函数的参数 search(arr, equalTen) //true
复制代码

闭包的使用,其实闭包就是一个匿名的函数,它被当做参数传递给函数,类似Objective-C中的block函数

复制代码
//闭包,闭包相当于一个匿名函数(匿名函数做函数的参数)
//所有传函数参数的地方都可以使用闭包

//实例一:number.map({...})是系统定义好的一个闭包函数
var numbers = [2,4,5,1,6]
numbers.map({(number:Int)->Int in
    
     return number * number
})


//实例二:自定义的一个闭包函数
func search2(arr:[Int],Condition:(Int)->Bool)->Bool
{
    for num in arr{
       if Condition(num){
          return true
       }
    }
    return false
}

var arr2 = [3,5,6,9,2]

search(arr2, {(number:Int)->Bool in
    return number == 6
})
复制代码

参数外部名的使用:

 

兴趣来了,给大家分享一个超前的知识,使用swift创建一个按钮蛮好玩的

//创建按钮
var button:UIButton = UIButton(
    frame: CGRectMake(0, 0, 100, 100))
button.backgroundColor = UIColor.redColor()
button.setTitle("open", forState:UIControlState.Normal)

截图:

 

 

 

函数形参名知识拓展:有时给参数设置一个外部名,在调用函数时可以明确知道所传参数的意思.避免含糊不清....

普通的参数名格式:

外部形参名格式:

 

使用外部形参名有很大的好处,可以很明确的表达函数的意思,避免含糊不清。例如:

//调用这个函数时,所传的意思比较模糊:

//给它设置一个外部名,传参数时意思就一目了然了。

 

外部参数名称速记

如果你想为一个函数提供一个外部形参名,然而本地形参名已经使用了一个合适的名称了,那你就不需要两次书写该形参的名称。相反,你可以写一次名字,并用一个hash符号(#)作为名称的前缀。这就告诉Swift使用名称相同的本地行参名称和外部形参名称。

 

默认形参值

你可以为任何形参定义默认值以作为函数定义的一部分。如果已经定义了默认值,那么调用函数时就可以省略该行参。

注意:请在函数形参列表的末尾放置带默认值的形参。这将确保所有函数调用都使用顺序相同的无默认值实参,并让在每种情况下清晰地调用相同的函数。

有默认值的外部形参名

在大多数情况下,为所有形参提供一个带默认值的外部名是非常有用的(因此要求)。如果在调用函数的时候提供了一个值,那么这将确保形参对应的实参有着明确的目的。

为了使这个过程更容易,当你自己没有提供外部名称时,Swift将为你定义的任何默认形参提供一个自动外部名。这个自动外部名和本地名一样,就像你已经在本地名前添加了hash符号(#)一样。

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
 
 
本文转自当天真遇到现实博客园博客,原文链接: http://www.cnblogs.com/XYQ-208910/p/4902973.html,如需转载请自行联系原作者
相关文章
|
22天前
|
安全 编译器 Swift
Swift 函数
10月更文挑战第27天
13 1
|
30天前
|
Swift UED
Swift 中使用闭包处理事件
【10月更文挑战第20天】使用闭包来处理事件在 Swift 编程中是一种非常常见和有效的方式。它提供了简洁、灵活和高效的解决方案,使我们能够更轻松地实现各种交互功能。通过深入理解闭包的原理和应用方法,我们可以更好地利用闭包来处理各种事件,提升应用的用户体验和开发效率。
|
21天前
|
存储 Swift iOS开发
Swift 闭包
10月更文挑战第28天
20 0
|
4月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
73 7
|
5月前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
109 5
Swift开发——简单函数实例
|
6月前
|
API Swift iOS开发
【Swift开发专栏】Swift中的游戏开发入门
【4月更文挑战第30天】本文介绍了使用Swift进行移动游戏开发的基础知识,包括Apple的开发平台(iOS, macOS)、工具(Xcode)、2D/3D游戏框架(SpriteKit, SceneKit)以及Metal图形API。Swift游戏开发涉及游戏循环、UI设计、逻辑、图形音效和网络编程。通过实例教程展示如何在Xcode中创建2D游戏,从创建项目到实现用户交互、音效和测试。掌握这些基础知识,开发者可快速入门并逐步进阶到更复杂的游戏中。
209 1
|
6月前
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
44 0
|
6月前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
51 0
|
6月前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 语言入门指南
【4月更文挑战第30天】Swift是苹果公司的现代编程语言,以其高效、安全和简洁深受喜爱。它融合了类型推断、闭包和泛型等特性,提供强大的内存管理,支持iOS、macOS等多个平台开发。基础语法包括变量、常量、数据类型、运算符和控制流语句。高级特性涵盖函数、闭包、类与结构体、协议以及泛型。学习Swift能为开发者奠定坚实基础。
76 0
|
6月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
133 1
下一篇
无影云桌面