#swift #if-statement #enums #return
Вопрос:
Мне было интересно, могу ли я заставить оператор case возвращать другое значение, если переменная была истинной или ложной.
var variable = false
enum enumeraton {
case thing
var value: Int {
switch self {
case .thing:
if variable = true {
return 1
}else {
return 2
}
}
}
}
есть ли вообще способ это сделать?
Комментарии:
1. Да, ты можешь. Вам просто нужно получить доступ к «Переменной» с того места, откуда вы звоните
value
. Так что, может быть, создайте функцию (func value(withVariable: Bool) -> Int
) или получите доступ к ней из метода (синглтон?)2. Не должно ли
if-else
бытьif variable == true
так, что вам кажется, что в условии отсутствует знак равенства3. Да! Спасибо, Ларм, это отлично сработало
Ответ №1:
В зависимости от того, как вы хотите лечить 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))
Ответ №2:
Вот решение, которое может сработать. Протестировано с 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