Я не могу понять, есть ли способ преобразовать регистр перечисления в одно из связанных с ним значений или вернуть ноль любым родовым способом, который можно применить к перечислению.Кажется, это должно быть возможно, по крайней мере, теоретически.
Что я хочу сделать ..
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
}
}
Если у кого-нибудь есть какие-либо идеи о том, как заставить работать вышеупомянутую операторную функцию, я буду рад любым предложениям.