二元运算符“~=”不能应用于 'String' 和 'String?' 类型的操作数
Binary operator '~=' cannot be applied to operands of type 'String' and 'String?'
我有一个简单的switch-statement其实没那么简单
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?'
中提到的错误。我不知道为什么其中一个是可选的是个问题。
由于 Optional Chaining,bubble?.name
的类型为 String?
。您有几个选择:
- 在
case
表达式中使用 "largeBubble"?
(仅限 Swift 2+)。
- 在执行
switch
之前检查 nil,因此 switch 参数将是 String
而不是 String?
。
- 如果您绝对确定[=32,请使用
bubble!.name
(或bubble.name
,如果它是SKPhysicsBody!
) =] 它不会是 nil
正如@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
}
“值永远不会隐式转换为另一种类型。如果您需要将值转换为不同的类型,请显式创建所需类型的实例。”
“let label = "The width is "
let width = 94
let widthLabel = label + String(width)”
这里的width是一个Integer类型,它被String(Int)函数转换成了String
在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
}
}
我有一个简单的switch-statement其实没那么简单
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?'
中提到的错误。我不知道为什么其中一个是可选的是个问题。
由于 Optional Chaining,bubble?.name
的类型为 String?
。您有几个选择:
- 在
case
表达式中使用"largeBubble"?
(仅限 Swift 2+)。 - 在执行
switch
之前检查 nil,因此 switch 参数将是String
而不是String?
。 - 如果您绝对确定[=32,请使用
bubble!.name
(或bubble.name
,如果它是SKPhysicsBody!
) =] 它不会是 nil
正如@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
}
“值永远不会隐式转换为另一种类型。如果您需要将值转换为不同的类型,请显式创建所需类型的实例。”
“let label = "The width is "
let width = 94
let widthLabel = label + String(width)”
这里的width是一个Integer类型,它被String(Int)函数转换成了String
在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
}
}