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

作者: farcecat (WoodyLiu)   2017-05-02 22:45:46
最近開始看書自學 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)
我想了一個晚上一直沒有將第一種轉成第二種的形式
想請問各位該如何將第一種轉成下面那種比較簡潔的語法
作者: darktt (小朱)   2017-05-03 05:57:00
這寫法不都一樣,而且下面的方法並沒有比較簡潔
作者: Polestar (極)   2017-05-03 13:24:00
第一個是把handler的部分另外寫,第二個是直接寫在一起第一個看起來比較複雜是因為他裡面還多一個彈出框的功能要寫成第二種就是把你第一段的部分直接塞到callAction裡面的handler
作者: vicjoyce0328 (咕咕咕)   2017-05-03 16:23:00
上面的callActionHandler 只是(UIAlertAction)-> Void當你要設定一個UIActionAlert 時,把它當成參數傳進去例如: let callAction = UIAlertAction(title:"foo",style:.default, handler: callActionHandler)而下面的就是一般寫法我是認為上面的 alertMessage.addAction (UIAlertAction(title:style: handler: ) ,handler 應該是要寫callActionHandler 而不是nil沒看完...alertMessage 那段沒錯,上面整個closure
作者: farcecat (WoodyLiu)   2017-05-04 11:17:00
謝謝大家的解釋,我懂了
作者: lemontea0328 (魔幻檸檬)   2017-05-05 09:47:00
https://goo.gl/rWRtsQ之前寫的閉包小練習給你參考
作者: farcecat (WoodyLiu)   2017-05-08 11:30:00
謝謝謝謝l大的分享,很清楚~

Links booklink

Contact Us: admin [ a t ] ucptt.com