2017-10-30 1 views
1

ich ein Prädikat mit einem Wörterbuch paramateres und Filterdaten auf Realm erstellen möchten, wiePrädikats in Reich mit Wörterbuch Parameter

var parameters = [String: Any]() 
         parameters["Mobile"] = a.Mobile! 
         parameters["CategoryId"] = self.SelectCategryId 

         let existContact = (contactBiz.FetchMulti(parameters: parameters)?.count)! > 0 

und in fetchMulti func mache ich ein Prädikat und Filterdaten

func FetchMulti(parameters: [String: Any])-> Results<RealmEntityType>? 
{ 
    do 
    { 
     let key = T.KeyName() 

     var object = realm.objects(RealmEntityType.self) 

     let subPredicates = parameters.map { 
      NSPredicate(format: "%@ = %@", $0.key, $0.value as! CVarArg) 
     } 

     let compoundPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: subPredicates) 


//   var predictionArray = [String]() 
//   for p in parameters 
//   { 
//    predictionArray.append("\(p.key) = \(p.value) ") 
//     
//   } 
//    
//   let perdicate = predictionArray.joined(separator: " && ") 
//    


     return object.filter(compoundPredicate); 
    } 
    catch 
    { 
     print(error.localizedDescription) 

    } 
    return nil 

} 

aber ich bekomme diesen Fehler

reason: 'Predicate expressions must compare a keypath and another keypath or a constant value' 

Jede Hilfe!

Antwort

0

Sie müssen %K verwenden, um anzuzeigen, dass der Wert der Name eines Schlüssels ist und keine Konstante string: NSPredicate(format: "%K = %@", $0.key, $0.value as! CVarArg)

+0

es nicht für jeden Datentyp zum Beispiel Int64 funktioniert –