Swift 通过元组的枚举开关

Swift 通过元组的枚举开关,swift,swift3,Swift,Swift3,我缺少元组的synatax作为开关枚举的例子 public protocol QueryType { var predicate: NSPredicate? { get } var sortDescriptors: [SortDescriptor] { get } } public enum Query: QueryType { case id(Int) case owner(String) case isSent(Bool)

我缺少元组的synatax作为开关枚举的例子

public protocol QueryType {
    var predicate: NSPredicate? { get }
    var sortDescriptors: [SortDescriptor] { get }
}

 public enum Query: QueryType {
        case id(Int)
        case owner(String)
        case isSent(Bool)

        public var predicate: NSPredicate? {

            switch self {
            case .id(let value):
                return NSPredicate(format: "id == %d", value)
            case (.owner(let value1), .isSent(let value2)):
                return NSPredicate(format: "owner == %@ AND isSent == %@", value1, NSNumber(booleanLiteral: value2)
            }
        }

        public var sortDescriptors: [SortDescriptor] {
            return [SortDescriptor(keyPath: "id")]
        }
    }
如果出现两种情况,我会得到一个错误:
“元组模式无法匹配非元组类型'MyType.Query'的值”

有可能吗

编辑

如何创建
case-ownerisent(String,Bool)
,然后在
中切换为

case .ownerIsSent(let value1, let value2):
return NSPredicate(format: "owner == %@ AND isSent == %@", value1, NSNumber(booleanLiteral: value2))

提前谢谢

那是不可能的。您只能同时打开一个案例。即使是
(self,self)
也会打开同一个案例

例如,解决方案可以是添加一个具有两个关联值的案例

case id(Int)
case owner(String)
case isSent(Bool)
case ownerIsSent(String, Bool)

那是不可能的。您只能同时打开一个案例。即使是
(self,self)
也会打开同一个案例

例如,解决方案可以是添加一个具有两个关联值的案例

case id(Int)
case owner(String)
case isSent(Bool)
case ownerIsSent(String, Bool)

编辑会有用的。我只想重命名这些东西:

e、 g

我想您想使用查询作为谓词的工厂!?
然后。。。我想你可以这样做

编辑就行了。我只想重命名这些东西:

e、 g

我想您想使用查询作为谓词的工厂!?
然后。。。我想你可以这样做

你是
打开
self
,类型是
Query
-而不是tuple
(Query,Query)
@NicolasMiari找到你了!,所以我需要的是:切换(self,self)?我认为这也行不通<代码>自我
只能是一种可能的情况。我不认为元组是正确的选择;也许你需要重新考虑你的数据type@NicolasMiari请查看编辑。您正在
切换
打开
self
,它属于
Query
-而不是元组
(Query,Query)
@NicolasMiari Got ya!,所以我需要的是:切换(self,self)?我认为这也行不通<代码>自我
只能是一种可能的情况。我不认为元组是正确的选择;也许你需要重新考虑你的数据type@NicolasMiari请看编辑。或者他可以使用一个选项集生成多个案例?如果查询的组合数量非常有限,我不允许任意组合,但它应该可以正常工作。我同意,或者他可以使用一个选项生成多个案例设置?如果一个查询的组合数量非常有限,我不允许任意组合,但它应该可以正常工作,我同意