2017-05-11 5 views
0

Im Folgenden erwähnt ist meine Reihe von Coupons löschen und ich möchte Wörterbuch löschen, die ‚x‘ CodeWie NSMutableDictionary mit Schlüssel in NSMutableArray in schnellen 3

(
     { 
     "coupon_code" = FLAT20PERCENT; 
    } 
     { 
     “coupon_code” = FLAT5PERCENT; 
    } 
     { 
     “coupon_code” = FLAT50; 
    } 
    ) 
+0

Sie können das 'Wörterbuch', das den 'x'-Code enthält, mit einem' NSPredicate' abrufen. Dann lösche dieses Objekt aus deinem Array. @Rajat – iPeter

Antwort

1

Zunächst einmal, warum Sie nicht versuchen, Swift Array und Dictionary Strukturen über ihre NS Pendants mit? Dies wird Ihre Arbeit viel leichter machen und suchen Sie den Code prägnanter:

Objective-C Art und Weise:

let array = NSMutableArray(array: [ 
    NSMutableDictionary(dictionary: ["coupon_code": "FLAT50PERCENT"]), 
    NSMutableDictionary(dictionary: ["coupon_code": "FLAT5PERCENT"]), 
    NSMutableDictionary(dictionary: ["coupon_code": "FLAT50"]) 
]) 

Swift Weg:

(Plus, verlieren Sie nicht den Typ anders als oben . wenn Sie sich mit Sammlung Klassen von Objective-C)

var array = [ 
    ["coupon_code": "FLAT50PERCENT"], 
    ["coupon_code": "FLAT5PERCENT"], 
    ["coupon_code": "FLAT50"] 
] 

Wie auch immer, darauf bestehen, hier ist ein Weg, dies zu tun:

let searchString = "PERCENT" 
let predicate = NSPredicate(format: "coupon_code contains[cd] %@", searchString) 
// change it to "coupon_code == @" for checking equality. 

let indexes = array.indexesOfObjects(options: []) { (dictionary, index, stop) -> Bool in 
    return predicate.evaluate(with: dictionary) 
} 
array.removeObjects(at: indexes) 

Sie können den Spielplatz von here herunterladen.

+0

Überspringen Sie das 'NSPredicate', setzen Sie die Bedingung in den Block. – Willeke

-1

Versuchen unter Code enthält, das Ihr Problem lösen kann . Für jede Klärung können Sie gerne einen Kommentar hinterlassen. :)

//Creating an `NsPredicate` that helps to find out the dictionary which contains 'x' code. 
    let pred = NSPredicate(format: "coupon_code == %@", x) 

    //Filtering your array with the pred to get that Dictionary. 
    let dict = array .filtered(using: pred) 

    //Deleting that object from your array. 
    array .removeObject(identicalTo: dict) 
+0

Kann mir bitte jemand sagen, wo ich falsch liege, damit ich mich selbst korrigieren kann und niemals irgendeine falsche Antwort geben kann, die abgelehnt wird. Bitte klären Sie. :) – iPeter

+1

'array.filtered (mit: pred)' wird nicht kompiliert. 'array.filtered (using: pred)' gibt ein Array zurück, kein Wörterbuch. Normalerweise probiere ich den Code selbst aus, bevor ich eine Antwort posten kann. Und manchmal werden sogar gute Fragen und Antworten abgelehnt. – Willeke

+0

Also, wenn ich 'let dict = array.filtered (mit: pred) [0]' mag, wird das korrekt sein? @Willeke – iPeter

Verwandte Themen