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
66 case .and: return NSCompoundPredicate(andPredicateWithSubpredicates: p)
67 case .or: return NSCompoundPredicate(orPredicateWithSubpredicates: p)
68 case .not: return NSCompoundPredicate(notPredicateWithSubpredicate: self.compound(predicates: p))
73 public extension NSPredicate {
75 public static func not(_ predicate: NSPredicate) -> NSPredicate {
77 return NSCompoundPredicate(notPredicateWithSubpredicate: predicate)
80 public static func and(_ predicates: [NSPredicate]) -> NSPredicate {
82 return NSCompoundPredicate(andPredicateWithSubpredicates: predicates)
85 public static func or(_ predicates: [NSPredicate]) -> NSPredicate {
87 return NSCompoundPredicate(orPredicateWithSubpredicates: predicates)
90 public static func `true`(_ property: String) -> NSPredicate {
92 return NSPredicate(format: "%K = TRUE", property)
95 public static func `false`(_ property: String) -> NSPredicate {
97 return NSPredicate(format: "%K != TRUE", property)
100 public static func isNil(_ property: String) -> NSPredicate {
102 return NSPredicate(format: "%K = NULL", property)
105 public static func isNotNil(_ property: String) -> NSPredicate {
107 return NSPredicate(format: "%K != NULL", property)
111 public func and(_ predicate: NSPredicate) -> NSPredicate {
113 return self.compound(predicates: [predicate], type: .and)
116 public func or(_ predicate: NSPredicate) -> NSPredicate {
118 return self.compound(predicates: [predicate], type: .or)
122 public extension NSPredicate {
124 public static var empty: NSPredicate {
126 return NSPredicate(value: true)
133 //precedencegroup PredicateAddPrecedence {
134 // associativity: right
135 // higherThan: AssignmentPrecedence
137 //precedencegroup PredicatePrecedence {
138 // higherThan: PredicateAddPrecedence
141 //infix operator |==| : PredicatePrecedence
142 //infix operator |!=| : PredicatePrecedence
144 //infix operator |<*| : PredicatePrecedence
146 //infix operator |+| : PredicateAddPrecedence
147 //infix operator ||| : PredicateAddPrecedence
148 //prefix operator |!|
150 //public extension NSPredicate {
152 // static func |+| (lhs: NSPredicate, rhs: NSPredicate) -> NSPredicate {
154 // return .and([lhs, rhs])
157 // static func ||| (lhs: NSPredicate, rhs: NSPredicate) -> NSPredicate {
159 // return .or([lhs, rhs])
162 // static prefix func |!| (lhs: NSPredicate) -> NSPredicate {
168 //public struct PredicateKey {
172 // init(_ name: String) {
177 // static func |==| (lhs: PredicateKey, rhs: Any) -> NSPredicate {
179 // return NSPredicate(lhs.name, equal: rhs)
182 // static func |!=| (lhs: PredicateKey, rhs: Any) -> NSPredicate {
184 // return NSPredicate(lhs.name, notEqual: rhs)
187 // static func |<*| (lhs: PredicateKey, rhs: [Any]) -> NSPredicate {
189 // return NSPredicate(lhs.name, valuesIn: rhs)