2 // NSPredicateExtension.swift
5 // Created by Hori,Masaki on 2017/10/07.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 public extension NSPredicate {
13 private convenience init(expression property: String, _ operation: String, _ value: Any) {
15 self.init(format: "%K \(operation) %@", argumentArray: [property, value])
20 public extension NSPredicate {
22 public convenience init(_ property: String, equal value: Any) {
24 self.init(expression: property, "=", value)
27 public convenience init(_ property: String, notEqual value: Any) {
29 self.init(expression: property, "!=", value)
32 public convenience init(_ property: String, equalOrGreaterThan value: Any) {
34 self.init(expression: property, ">=", value)
37 public convenience init(_ property: String, equalOrLessThan value: Any) {
39 self.init(expression: property, "<=", value)
42 public convenience init(_ property: String, greaterThan value: Any) {
44 self.init(expression: property, ">", value)
47 public convenience init(_ property: String, lessThan value: Any) {
49 self.init(expression: property, "<", value)
52 public convenience init(_ property: String, valuesIn values: [Any]) {
54 self.init(format: "%K IN %@", argumentArray: [property, values])
59 public extension NSPredicate {
61 public func compound(predicates: [NSPredicate], type: NSCompoundPredicate.LogicalType = .and) -> NSPredicate {
63 let p = [self] + predicates
67 case .and: return NSCompoundPredicate(andPredicateWithSubpredicates: p)
69 case .or: return NSCompoundPredicate(orPredicateWithSubpredicates: p)
71 case .not: return NSCompoundPredicate(notPredicateWithSubpredicate: self.compound(predicates: p))
77 public extension NSPredicate {
79 public static func not(_ predicate: NSPredicate) -> NSPredicate {
81 return NSCompoundPredicate(notPredicateWithSubpredicate: predicate)
84 public static func and(_ predicates: [NSPredicate]) -> NSPredicate {
86 return NSCompoundPredicate(andPredicateWithSubpredicates: predicates)
89 public static func or(_ predicates: [NSPredicate]) -> NSPredicate {
91 return NSCompoundPredicate(orPredicateWithSubpredicates: predicates)
94 public static func `true`(_ property: String) -> NSPredicate {
96 return NSPredicate(format: "%K = TRUE", property)
99 public static func `false`(_ property: String) -> NSPredicate {
101 return NSPredicate(format: "%K != TRUE", property)
104 public static func isNil(_ property: String) -> NSPredicate {
106 return NSPredicate(format: "%K = NULL", property)
109 public static func isNotNil(_ property: String) -> NSPredicate {
111 return NSPredicate(format: "%K != NULL", property)
115 public func and(_ predicate: NSPredicate) -> NSPredicate {
117 return self.compound(predicates: [predicate], type: .and)
120 public func or(_ predicate: NSPredicate) -> NSPredicate {
122 return self.compound(predicates: [predicate], type: .or)
126 public extension NSPredicate {
128 public static var empty: NSPredicate {
130 return NSPredicate(value: true)
137 //precedencegroup PredicateAddPrecedence {
138 // associativity: right
139 // higherThan: AssignmentPrecedence
141 //precedencegroup PredicatePrecedence {
142 // higherThan: PredicateAddPrecedence
145 //infix operator |==| : PredicatePrecedence
146 //infix operator |!=| : PredicatePrecedence
148 //infix operator |<*| : PredicatePrecedence
150 //infix operator |+| : PredicateAddPrecedence
151 //infix operator ||| : PredicateAddPrecedence
152 //prefix operator |!|
154 //public extension NSPredicate {
156 // static func |+| (lhs: NSPredicate, rhs: NSPredicate) -> NSPredicate {
158 // return .and([lhs, rhs])
161 // static func ||| (lhs: NSPredicate, rhs: NSPredicate) -> NSPredicate {
163 // return .or([lhs, rhs])
166 // static prefix func |!| (lhs: NSPredicate) -> NSPredicate {
172 //public struct PredicateKey {
176 // init(_ name: String) {
181 // static func |==| (lhs: PredicateKey, rhs: Any) -> NSPredicate {
183 // return NSPredicate(lhs.name, equal: rhs)
186 // static func |!=| (lhs: PredicateKey, rhs: Any) -> NSPredicate {
188 // return NSPredicate(lhs.name, notEqual: rhs)
191 // static func |<*| (lhs: PredicateKey, rhs: [Any]) -> NSPredicate {
193 // return NSPredicate(lhs.name, valuesIn: rhs)