[問題] 閉包(closure)的語法應用

看板MacDev作者 (WoodyLiu)時間8年前 (2017/05/02 22:45), 編輯推噓7(7015)
留言22則, 5人參與, 最新討論串1/1
最近開始看書自學 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://www.ptt.cc/bbs/MacDev/M.1493736350.A.DBD.html

05/03 05:57, , 1F
這寫法不都一樣,而且下面的方法並沒有比較簡潔
05/03 05:57, 1F

05/03 13:24, , 2F
第一個是把handler的部分另外寫,第二個是直接寫在一起
05/03 13:24, 2F

05/03 13:29, , 3F
第一個看起來比較複雜是因為他裡面還多一個彈出框的功
05/03 13:29, 3F

05/03 13:29, , 4F
05/03 13:29, 4F

05/03 13:33, , 5F
要寫成第二種就是把你第一段的部分直接塞到callAction
05/03 13:33, 5F

05/03 13:33, , 6F
裡面的handler
05/03 13:33, 6F

05/03 16:23, , 7F
上面的callActionHandler 只是(UIAlertAction)-> V
05/03 16:23, 7F

05/03 16:23, , 8F
oid
05/03 16:23, 8F

05/03 16:24, , 9F
當你要設定一個UIActionAlert 時,把它當成參數傳進
05/03 16:24, 9F

05/03 16:24, , 10F
05/03 16:24, 10F

05/03 16:27, , 11F
例如: let callAction = UIAlertAction(title:"fo
05/03 16:27, 11F

05/03 16:27, , 12F
o",style:.default, handler: callActionHandler)
05/03 16:27, 12F

05/03 16:28, , 13F
而下面的就是一般寫法
05/03 16:28, 13F

05/03 16:32, , 14F
我是認為上面的 alertMessage.addAction (UIAlertAc
05/03 16:32, 14F

05/03 16:32, , 15F
tion(title:style: handler: ) ,handler 應該是要寫
05/03 16:32, 15F

05/03 16:32, , 16F
callActionHandler 而不是nil
05/03 16:32, 16F

05/03 17:17, , 17F
沒看完...alertMessage 那段沒錯,上面整個closure
05/03 17:17, 17F

05/04 11:17, , 18F
謝謝大家的解釋,我懂了
05/04 11:17, 18F

05/05 09:47, , 19F
05/05 09:47, 19F

05/05 09:47, , 20F
之前寫的閉包小練習給你參考
05/05 09:47, 20F

05/08 11:30, , 21F
謝謝
05/08 11:30, 21F

05/08 11:30, , 22F
謝謝l大的分享,很清楚~
05/08 11:30, 22F
文章代碼(AID): #1P29kUsz (MacDev)
文章代碼(AID): #1P29kUsz (MacDev)