2016-04-23 23 views
8

Birden düğmelere bağımlısı bir @IBAction yöntemde, bir anahtar kullanmaya çalışıyorumUIButton başlığının açılması: 'String' türündeki ifade deseni 'String ?!' türündeki değerlerle eşleşemez

@IBAction func buttonClick(sender: AnyObject) { 

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

Yukarıda çalıştığınızda, aşağıdaki hatayı alıyorum:

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

+0

mu .currentTitle 'anahtarı (! UIButton olarak gönderen) {' çalışır? – NobodyNada

+0

@NobodyNada nope ... – Andrei

+0

@EdCottrell Dizeleri doğrudan Swift'de karşılaştırabilirsiniz, çünkü testler == 'eşitlik için test ederken, ===' nesnelerin aynı nesne olup olmadığını sınar. – NobodyNada

cevap

12

currentTitle bir olduğunu İsteğe bağlı olarak açmanız gerekir. Ayrıca, currentTitle özelliğine eriştiğiniz için sender türü UIButton olmalıdır.

@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

Cevabınız için teşekkürler, ancak şimdi aldım '' String '' 'String' 'türündeki değerlerle eşleştirilemiyor' 'String?' ' – Andrei

+0

Ayrıca, yalnızca parametre değiştirdiğiniz için çalıştığından da bahsetmeyi unutmayın. AnyObject'den UIButton'a ( –

+0

@Andrei) Gönderenin türünü "UIButton" –

1

currentTitle unwrapping bir başka yolu ve daha şık bir tanesidir düşünüyorum:

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