作者farcecat (WoodyLiu)
看板MacDev
标题[问题] 闭包(closure)的语法应用
时间Tue May 2 22:45:46 2017
最近开始看书自学 xcode (swift)
之前没有其他基础,学得有点辛苦
书籍:ios 10 app 程式设计实力超进化攻略
现在学到UIAlertController
里面有一段闭包的应用说明:
let callActionHandler = { (action:UIAlertAction!) -> Void in
let alertMessage = UIAlertController(title: "Service Unavailable", message: "Sorry, the call feature is not available yet. Please retry later.", preferredStyle: .alert)
alertMessage.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alertMessage, animated: true, completion: nil )
}
书中又教了另一种形式 (上面说推荐,比较简洁)
但是不是用上面那个设定去介绍
let checkInAction = UIAlertAction(title: "Check in", style: .default, handler:
{
(action:UIAlertAction!) -> Void in
let cell = tableView.cellForRow(at : indexPath)
cell?.accessoryType = .checkmark
})
optionMenu.addAction(checkInAction)
我想了一个晚上一直没有将第一种转成第二种的形式
想请问各位该如何将第一种转成下面那种比较简洁的语法
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.60.120
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1493736350.A.DBD.html
1F:推 darktt: 这写法不都一样,而且下面的方法并没有比较简洁 05/03 05:57
2F:推 Polestar: 第一个是把handler的部分另外写,第二个是直接写在一起 05/03 13:24
3F:→ Polestar: 第一个看起来比较复杂是因为他里面还多一个弹出框的功 05/03 13:29
4F:→ Polestar: 能 05/03 13:29
5F:推 Polestar: 要写成第二种就是把你第一段的部分直接塞到callAction 05/03 13:33
6F:→ Polestar: 里面的handler 05/03 13:33
7F:推 vicjoyce0328: 上面的callActionHandler 只是(UIAlertAction)-> V 05/03 16:23
8F:→ vicjoyce0328: oid 05/03 16:23
9F:→ vicjoyce0328: 当你要设定一个UIActionAlert 时,把它当成参数传进 05/03 16:24
10F:→ vicjoyce0328: 去 05/03 16:24
11F:推 vicjoyce0328: 例如: let callAction = UIAlertAction(title:"fo 05/03 16:27
12F:→ vicjoyce0328: o",style:.default, handler: callActionHandler) 05/03 16:27
13F:→ vicjoyce0328: 而下面的就是一般写法 05/03 16:28
14F:推 vicjoyce0328: 我是认为上面的 alertMessage.addAction (UIAlertAc 05/03 16:32
15F:→ vicjoyce0328: tion(title:style: handler: ) ,handler 应该是要写 05/03 16:32
16F:→ vicjoyce0328: callActionHandler 而不是nil 05/03 16:32
17F:→ vicjoyce0328: 没看完...alertMessage 那段没错,上面整个closure 05/03 17:17
18F:→ farcecat: 谢谢大家的解释,我懂了 05/04 11:17
20F:→ lemontea0328: 之前写的闭包小练习给你参考 05/05 09:47
21F:→ farcecat: 谢谢 05/08 11:30
22F:→ farcecat: 谢谢l大的分享,很清楚~ 05/08 11:30