2016-04-23 13 views
8

Ich versuche, einen Schalter in einer @IBAction Methode zu verwenden, die mehrere Tasten verhaktUIButton-Titel einschalten: Ausdruckmuster vom Typ 'String' kann nicht mit Werten vom Typ 'String ?!' übereinstimmen

@IBAction func buttonClick(sender: AnyObject) { 

     switch sender.currentTitle { 
      case "Button1": 
       print("Clicked Button1") 
      case "Button2": 
       print("Clicked Button2") 
      default: 
       break 
     } 

Wenn ich die oben versuchen, erhalte ich folgende Fehlermeldung:

Expression pattern of type 'String' cannot match values of type 'String?!'

+0

Ist 'Schalter (! Absender als UIButton) .currentTitle {' Arbeit? – NobodyNada

+0

@NobodyNada nope ... – Andrei

+0

@EdCottrell Sie können Strings direkt in Swift vergleichen, da Tests wie '==' auf Gleichheit prüfen, während '===' testet, ob die Objekte das gleiche exakte Objekt sind. – NobodyNada

Antwort

12

currentTitle ist ein optional, so dass Sie es auspacken müssen. Außerdem sollte der Typ senderUIButton sein, da Sie auf die currentTitle-Eigenschaft zugreifen.

@IBAction func buttonClick(sender: UIButton) { 
    if let theTitle = sender.currentTitle { 
     switch theTitle { 
      case "Button1": 
       print("Clicked Button1") 
      case "Button2": 
       print("Clicked Button2") 
      default: 
       break 
     } 
    } 
} 
+0

Danke für die Antwort, aber ich bekomme jetzt Ausdruck Muster des Typs 'String' kann nicht Werte des Typs 'String?' – Andrei

+0

nicht vergessen zu erwähnen, es funktioniert auch nur, weil Sie den Methodenparameter geändert haben von AnyObject zu UIButton –

+0

@Andrei Stellen Sie sicher, den Typ des Absenders in 'UIButton' zu ändern –

1

Ein anderer Weg currentTitle von auszupacken und ich denke, eine elegantere ist:

switch sender.currentTitle ?? "" { 
    //case statements go here 
} 
Verwandte Themen