Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于简化Swift中枚举关联值的运算符或函数_Swift_Generics_Enums_Operators - Fatal编程技术网

用于简化Swift中枚举关联值的运算符或函数

用于简化Swift中枚举关联值的运算符或函数,swift,generics,enums,operators,Swift,Generics,Enums,Operators,我不知道是否有一种方法可以将枚举大小写转换为它的一个关联值,或者以任何可以应用于枚举的通用方式返回nil。看起来至少在理论上是可能的 我想做的 let value: TestClass1? = model .> TestEnum.one // do something 我现在正在做的 if case .one(value: let value) = self.model { // do something } guard case .one(value: let value)

我不知道是否有一种方法可以将枚举大小写转换为它的一个关联值,或者以任何可以应用于枚举的通用方式返回nil。看起来至少在理论上是可能的

我想做的

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
}

如果有人对如何使上述操作员功能工作有任何想法,我希望得到任何建议。

这在swift中无法实现。为什么?我希望这篇文章将指导你:可能的副本
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
    }
}