我想知道如果变量为true或false,是否可以让case语句返回不同的值。
var variable = false
enum enumeraton {
case thing
var value: Int {
switch self {
case .thing:
if variable = true {
return 1
}else {
return 2
}
}
}
}
有这样的办法吗?
根据您想要如何处理variable
,有不同的解决方案。如果您想在创建枚举变量/属性时读取variable
的值,您可以使用与枚举相关的值
var variable = false
enum Enumeraton {
case thing(Bool)
var value: Int {
switch self {
case .thing(let flag):
return flag ? 1 : 2
}
}
}
let enumValue: Enumeraton = .thing(variable)
print(enumValue.value)
但是,如果你想随着时间的推移读取variable
,那么以布尔值为自变量的函数是更好的
enum Enumeraton {
case thing
func value(for flag: Bool) -> Int {
guard self == .thing else { return 0 } // or some other action
return flag ? 1 : 2
}
}
let enumValue: Enumeraton = .thing
print(enumValue.value(for: variable))
这里有一个可行的解决方案。使用Xcode 12.5和Swift 5.4 进行测试
var variable = false
enum enumeraton {
case thing
case other
var value: Int {
switch self {
case .thing:
if variable {
return 1
} else {
return 2
}
case .other:
return 0
}
}
}
let foo = enumeraton.thing
print(foo.value) //prints 2
variable = true
print(foo.value) //prints 1