利用 switch 比對 button,判斷使用者點擊的 button

透過 IBAction,我們可以方便地設定 button 被點擊時觸發 function,執行想做的事情。大部分的時候,每個 button 會搭配自己的 IBAction function,然而如果做的事情差不多,我們也可以將多個 button 連到同一個 IBAction function,例如以下選擇要當彼得潘或虎克船長的例子(相信大家一定都選彼得潘吧),此時畫面上的 2 個 button 都連到 function selectRoleButtonPressed(_:)。

為了在 function 裡判斷點選的 button ,我們可以用 tag 區分。不過這方方有個麻煩的地方,我們必須另外設定 button 的 tag,而且 tag 的數字也會讓程式碼看起來較不直覺。

@IBAction func selectRoleButtonPressed(_ sender: UIButton) {switch sender.tag {case 1:name = “peter”case 2:name = “hook”default:break}}

其實, Swift 的 switch 什麼都能比,所以你甚至可以用 switch 比對當初連到 IBOutlet 的 button 物件 !

@IBAction func selectRoleButtonPressed(_ sender: UIButton) {switch sender {case peterButton:name = “peter”case hookButton:name = “hook”default:break}}

看到這裡,也再一次地證明了 Swift 的好。剛剛的做法,在 Objective-C 是做不到的,因為 Objective-C 的 switch 只能比對數字。

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com