2015-07-19 56 views
1

所以基本上我想創建一個鍵盤和當在信的東西,用戶點擊應該發生:xcode-幾個案例的重構開關。

@IBAction func letterBtn(sender: UIButton) { // All the letter buttons are linked to this func. 

     switch sender.currentTitle! { 

     case "A": 
      moveLetters(sender) 
     case "B": 
      moveLetters(sender) 
     case "C": 
      moveLetters(sender) 
     case "D": 
      moveLetters(sender) 
     case "E": 
      moveLetters(sender) 
     case "F": 
      moveLetters(sender) 
     case "G": 
      moveLetters(sender) 


     default : 

      println("Error") 
     } 

    } 
func animateLetter (pos: UILabel, btn: UIButton) { // Make the letter move towards a label. 

     UIView.animateWithDuration(0.5, animations: {() -> Void in 

      btn.center = pos.center 
     }) 
    } 

    func moveLetters (btn: UIButton) { // Determine which label the pressed letter should move towards. 

     switch emptyPos.count { 

     case 1: 

      animateLetter(pos1, btn: btn) 
      emptyPos.append(0) 

     case 2: 

      animateLetter(pos2, btn: btn) 
      emptyPos.append(0) 

     case 3: 

      animateLetter(pos3, btn: btn) 
      emptyPos.append(0) 

     case 4: 

      animateLetter(pos4, btn: btn) 
      emptyPos.append(0) 



     default: 
      println("Error") 
     } 
    } 

我發現自己使用多聯開關的情況下,基本上做同樣的事情在2層不同的功能,我是想知道是否有更好的方法比使用整個字母表的26個案例,以及我的其他功能。

回答

4

首先,你可以combine案件:

switch sender.currentTitle! { 
case "A", "B", "C": ... etc 
    // do something 

二,switch語句允許intervals,從中你可以通過查看按鈕標題的第一個字符利潤:

switch sender.currentTitle![0] { 
case "A"..."Z": 
    // do something 
} 

至於你的其他問題,我會給每個標籤一個標籤(pos1.tag = 1,pos2.tag = 2)等,並使用viewWithTag函數來獲得正確的標籤。

+0

太感謝你了,這是非常有幫助:) – Abdou023

1

@Glorfindel答案與"A"..."Z"範圍很好。您還可以使用NSRegularExpression這樣做:

let regex = try! NSRegularExpression(pattern: "^[A-Z]", options: .CaseInsensitive) 
let range = NSMakeRange(0, distance(str.startIndex, str.endIndex)) 
if let match = regex.firstMatchInString(str, options: .ReportCompletion, range: range) { 
    // Do something 
} 
+0

謝謝您的幫助。 – Abdou023