Оператор или функция для упрощения значения, связанного с перечислением, в Swift - PullRequest
0 голосов
/ 25 января 2019

Я не могу понять, есть ли способ преобразовать регистр перечисления в одно из связанных с ним значений или вернуть ноль любым родовым способом, который можно применить к перечислению.Кажется, это должно быть возможно, по крайней мере, теоретически.

Что я хочу сделать ..

let value: TestClass1? = model .> TestEnum.one
// do something

Что я делаю сейчас ..

if case .one(value: let value) = self.model {
    // do something
}

guard case .one(value: let value) = self.model else {
    //handle case where self.model != .one
    return
}
//do something

Делаетне компилируется:

infix operator .>
func .><T,U>( _expression: T, _case: (U) -> T) -> U? {
    guard case _case(let u) = _expression else { return nil }
    return u
}

Контрольный пример:

class TestClass1 {}
class TestClass2 {}

enum TestEnum {
    case one(value: TestClass1)
    case two(value: TestClass2)
}

struct TestStruct {

    let model: TestEnum = .one(value: TestClass1())

    func function() -> TestClass1? {
        // what I want to do
        return model .> TestEnum.one
    }
}

Если у кого-нибудь есть какие-либо идеи о том, как заставить работать вышеупомянутую операторную функцию, я буду рад любым предложениям.

...