Switching on UIButton title: Expression pattern of

2020-07-06 06:54发布

问题:

I'm trying to use a switch in an @IBAction method, which is hooked to multiple buttons

@IBAction func buttonClick(sender: AnyObject) {

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

When I try the above, I get the following error:

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

回答1:

currentTitle is an optional so you need to unwrap it. Also, the type of sender should be UIButton since you are accessing the currentTitle property.

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


回答2:

Another way of unwrapping currentTitle and I think a more elegant one is:

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