2016-04-23 7 views
8

私は上記をしようとすると、私は次のエラーを取得するUIButtonタイトルの切り替え: 'String'タイプの式パターンは 'String ?!'タイプの値と一致できません。

@IBAction func buttonClick(sender: AnyObject) { 

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

複数のボタンに引っ掛けられる@IBAction方法でスイッチを使用しようとしている:

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

+0

は 'スイッチ(!UIButtonとして送信者).currentTitle {'仕事をしていますか? – NobodyNada

+0

@NobodyNada nope ... – Andrei

+0

@EdCottrell Swiftの文字列を直接比較することができます。これは、 '=='のようなテストは同等かどうかをテストし、 '==='はオブジェクトが同じ正確なオブジェクトであるかどうかをテストします。 – NobodyNada

答えて

12

currentTitleですあなたはそれをアンラップする必要があるのでオプションです。またsenderのタイプは、currentTitleプロパティにアクセスしているため、UIButtonにする必要があります。

@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

回答ありがとうございましたが、今は '' String型の式パターンは '' String型の値と一致できません。 – Andrei

+0

メソッドパラメータを変更したので動作することを忘れないでくださいAnyObjectからUIButtonへ –

+0

@Andrei送信者のタイプを 'UIButton'に変更してください。 –

1

currentTitleをアンラップする別の方法と私はよりエレガントなものがあると思う:

switch sender.currentTitle ?? "" { 
    //case statements go here 
} 
関連する問題