这为什么不起作用?
enum SwitchStatus {
case on
case off
}
var switchStatus: SwitchStatus = .off
func flipSwitch() -> SwitchStatus {
return !switchStatus
}
我在return !switchStatus
遇到此错误:
无法将类型“ SwitchStatus”的值转换为预期的参数类型“布尔”
如果我说返回Bool
,为什么会期望SwitchStatus
?
答案 0 :(得分:5)
!
是“逻辑非”运算符,并接受一个Bool
参数,因此
编译器已经抱怨!switchStatus
表达式。
您可以通过定义
将!
扩展到SwitchStatus
自变量
prefix func !(arg: SwitchStatus) -> SwitchStatus
函数,但是我实际上要做的是定义一个flip()
方法,
类似于added to Bool
in Swift 4.2的toggle()
方法:
enum SwitchStatus {
case on
case off
mutating func flip() {
switch self {
case .on: self = .off
case .off: self = .on
}
}
}
那你就可以做
var switchStatus: SwitchStatus = .on
switchStatus.flip() // Switch if off ...
switchStatus.flip() // ... and on again.
答案 1 :(得分:1)
您需要
return switchStatus == .on ? .off : .on
答案 2 :(得分:0)
Sh_Khan有正确的答案。而且您可能希望将该函数作为枚举的一部分
enum SwitchStatus {
case on
case off
func flipSwitch() -> SwitchStatus {
return self == .on ? .off : .on
}
}