这篇文章介绍了SwiftUI中闭包的基础知识,包括如何创建、接受参数、返回值以及作为参数等。同时,还介绍了尾随闭包语法的使用方法。通过本文的学习,读者可以更好地理解闭包的概念和在SwiftUI中的应用。
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉 据说这个很难。加油!
创建一个简单的闭包 我们使用变量来调用函数,甚至将函数通过变量传递给另一个函数。来创建一个简单的闭包:
1 2 3 4 5 let zhhooo = { print ("zhhooo.com" ) } zhhooo()
相当于常量zhhooo
中包含了一个没有名字的函数。
在闭包中接受参数 在闭包中可以接受参数,但是参数需要在大括号中编写,并且需要带in
。例如:
1 2 3 let zhhooo = {(url: String ) in print ("welcome go to \(url) !" ) }
函数和闭包的区别就是,闭包在调用的时候不需要标注参数标签,例如:
1 zhhooo("blog.zhhooo.com" )
注意: 闭包不能使用外部参数标签
在闭包中返回值 在闭包中可以返回值,写法类似函数。同样是利用return
。
1 2 3 4 5 6 7 let zhhooo = {(url: String ) -> String in return "let's go to \(url) !" } let txt = zhhooo("zhhooo.com" )print (txt)
其他例子:
1 2 3 4 5 6 let drivingWithReturn = { (place: String ) -> String in return "I'm going to \(place) in my car" } let message = drivingWithReturn("London" )print (message)
其他例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 let measureSize = { (inches: Int ) -> String in switch inches { case 0 ... 26 : return "XS" case 27 ... 30 : return "S" case 31 ... 34 : return "M" case 35 ... 38 : return "L" default : return "XL" } } measureSize(36 )
闭包作为参数 之前提到了闭包可以作为参数放入其他函数中,现在它来了~!是的,这是个有毒的语法。它需要参数置顶类型为Void
,通过格式<参数>:() -> Void
来调用。Void
的意思就是告诉Swift我们什么都不做。例如:
1 2 3 4 5 6 7 8 9 10 11 let zhhooo = { print ("hello!zhhooo!~" ) } func tellmeadr (action : () -> Void ) { print ("Are you Ready?" ) action() print ("Let's go!" ) } tellmeadr(action:zhhooo)
其他例子:
1 2 3 4 5 6 7 8 9 let driving = { print("I'm driving in my car") } func travel(action: () -> Void) { print("I'm getting ready to go.") action() print("I arrived!") } travel(action: driving)
其他例子:
1 2 3 4 5 6 7 8 let awesomeTalk = { print ("Here's a great talk!" ) } func deliverTalk (name : String , type : () -> Void ) { print ("My talk is called \(name) " ) type () } deliverTalk(name: "My Awesome Talk" , type: awesomeTalk)
其他例子:
1 2 3 4 5 6 7 8 var payCash = { print ("Here's the money." ) } func buyClothes (item : String , using payment : () -> Void ) { print ("I'll take this \(item) ." ) payment() } buyClothes(item: "jacket" , using: payCash)
尾随闭包语法 还记得刚才的第一个例子吗?我们可以使用尾随闭包语法来书写它。尾随闭包语法是常见的一种闭包语法,它的格式是在调用的时候的一种格式。我们先来看一下最初的例子:
1 2 3 4 5 func tellmeadr (action : () -> Void ) { print ("Are you Ready?" ) action() print ("Let's go!" ) }
我们在调用的时候可以不只是写let
之后用函数的直接调用,因为这个函数最后一个参数是闭包,我们还可以用这种尾随闭包语法,格式为:<函数名>(){<闭包内容>},例如上一节的第一个例子我们可以转写成:
1 2 3 4 5 6 7 8 9 func tellmeadr (action : () -> Void ) { print ("Are you Ready?" ) action() print ("Let's go!" ) } tellmeadr() { print ("hello!zhhooo!~" ) }
成功的省略了常量let
的部分。并且因为tellmeadr
没有其他参数,我们甚至可以省略掉()
:
1 2 3 4 5 6 7 8 9 func tellmeadr (action : () -> Void ) { print ("Are you Ready?" ) action() print ("Let's go!" ) } tellmeadr { print ("hello!zhhooo!~" ) }
其他例子:
1 2 3 4 5 6 7 8 9 func travel (action : () -> Void ) { print ("I'm getting ready to go." ) action() print ("I arrived!" ) } travel() { print ("I'm driving in my car" ) }
其他例子:
1 2 3 4 5 6 7 8 9 10 11 func goOnVacation (to destination : String , _ activities : () -> Void ) { print ("Packing bags..." ) print ("Getting on plane to \(destination) ..." ) activities() print ("Time to go home!" ) } goOnVacation(to: "Mexico" ) { print ("Go sightseeing" ) print ("Relax in sun" ) print ("Go hiking" ) }
参考资料 查看下一天的SwiftUI学习笔记
关于100days英文课程