SWIFT 3-Prädikat für NSArray funktioniert nicht richtig mit den zahlen
Bin ich mit dem lernen von Prädikaten für die Filterung. Ich fand ein tutorial, aber ein Aspekt ist nicht für mich arbeiten im Swift-3. Hier einige spezifische code:
let ageIs33Predicate01 = NSPredicate(format: "age = 33") //THIS WORKS
let ageIs33Predicate02 = NSPredicate(format: "%K = 33", "age") //THIS WORKS
let ageIs33Predicate03 = NSPredicate(format: "%K = %@", "age","33") //THIS DOESN'T WORK
let ageIs33Predicate04 = NSPredicate(format: "age = %@","33") //THIS DOESN'T WORK
Alle 4 kompilieren, aber die letzten 2 produzieren keine Ergebnisse, obwohl ich einen Fall, wo Alter = 33. Hier ist der test, den kompletten test-code aus dem tutorial:
import Foundation
class Person: NSObject {
let firstName: String
let lastName: String
let age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
override var description: String {
return "\(firstName) \(lastName)"
}
}
let alice = Person(firstName: "Alice", lastName: "Smith", age: 24)
let bob = Person(firstName: "Bob", lastName: "Jones", age: 27)
let charlie = Person(firstName: "Charlie", lastName: "Smith", age: 33)
let quentin = Person(firstName: "Quentin", lastName: "Alberts", age: 31)
let people = [alice, bob, charlie, quentin]
let ageIs33Predicate01 = NSPredicate(format: "age = 33")
let ageIs33Predicate02 = NSPredicate(format: "%K = 33", "age")
let ageIs33Predicate03 = NSPredicate(format: "%K = %@", "age","33")
let ageIs33Predicate04 = NSPredicate(format: "age = %@","33")
(people as NSArray).filtered(using: ageIs33Predicate01)
//["Charlie Smith"]
(people as NSArray).filtered(using: ageIs33Predicate02)
//["Charlie Smith"]
(people as NSArray).filtered(using: ageIs33Predicate03)
//[]
(people as NSArray).filtered(using: ageIs33Predicate04)
// []
Was mache ich falsch? Danke.
InformationsquelleAutor Frederic | 2016-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum sollten die letzten beiden arbeiten? Übergeben Sie eine Zeichenfolge in eine
Int
Eigenschaft. Sie müssen pass, die in einerInt
zu vergleichen, gegen dieInt
Eigenschaft.Ändern Sie die letzten beiden:
Beachten Sie die änderung in der Formatbezeichner von
%@
zu%d
.Wohl die Predicate Programming Guide
Dies ist eine große Antwort. Ich habe gelesen, Dokumentation und Beispiele. Es ist offensichtlich, wenn ich sehe die Antwort, aber ich habe nicht gesehen, das dokumentiert irgendwo..
Wie kann ich filtern Wert aus einem array mit Prädikat?
InformationsquelleAutor rmaddy