2015-07-19 40 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