我有一个简单的switch语句并不那么简单。
switch(bubble?.name){ //bubble is SKPhysicsBody
case "largeBubble": // <= error
newBubbleSize = "medium"
break;
default:
newBubbleSize = "large"
break;
}
我在标题Binary operator '~=' cannot be applied to operands of type 'String' and 'String?'
中提到错误。我不知道为什么其中一个是可选的问题。
答案 0 :(得分:8)
由于Optional Chaining,bubble?.name
的类型为String?
。您有几个选择:
"largeBubble"?
表达式中使用case
(仅限Swift 2+)。switch
之前检查是否为零,因此switch参数将为String
而不是String?
。bubble!.name
(或bubble.name
,如果它是SKPhysicsBody!
)零答案 1 :(得分:3)
正如@jtbandes所说,问题是bubble?.name
类型为String?
的结果。对于给定的解决方案,替代解决方案是覆盖~=
运算符以将String?
和String
作为参数,例如:
func ~= (lhs: String, rhs: String?) -> Bool {
return lhs == rhs
}
或者,使它更通用:
func ~= <T: Equatable>(lhs: T, rhs: T?) -> Bool {
return lhs == rhs
}
答案 2 :(得分:1)
“值永远不会隐式转换为其他类型。如果需要将值转换为其他类型,请显式创建所需类型的实例。“
“let label = "The width is "
let width = 94
let widthLabel = label + String(width)”
这里width是一个Integer类型,它已被String(Int)函数
转换为String答案 3 :(得分:0)
然后在Swift 2.0(发件人:UIButton)中!对于开关串工作。
let operation = sender.currentTitle!
在Swift 2.0中,(发件人: AnyObject )然后!!对于开关串工作。
let operation = sender.currentTitle!!
我犯的错误是使用AnyObject而不是UIButton。
@IBAction func operate(sender: AnyObject) {
let operation = sender.currentTitle!!
if userIsInTheMiddleOfTypeingNumber{
enter()
}
switch operation{
case "×":
if operandStack.count >= 2{
displayValue = operandStack.removeLast() * operandStack.removeLast()
}
break
// case "÷":
// break
// case "+":
// break
// case "−":
// break
default:
break
}
}