Как заставить регистр возвращать другое значение, если переменная в swift имеет значение true?

#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