问题
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
}
来源:https://stackoverflow.com/questions/36814250/switching-on-uibutton-title-expression-pattern-of-type-string-cannot-match-va