Swift 通过元组的枚举开关
我缺少元组的synatax作为开关枚举的例子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)
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请看编辑。或者他可以使用一个选项集生成多个案例?如果查询的组合数量非常有限,我不允许任意组合,但它应该可以正常工作。我同意,或者他可以使用一个选项生成多个案例设置?如果一个查询的组合数量非常有限,我不允许任意组合,但它应该可以正常工作,我同意