Opsommen van collecties in Objective-C is vaak breedsprakig en onhandig. Als je gewend bent aan Ruby of hebt gewerkt met Underscore of Lo-Dash in JavaScript, dan weet je dat er elegantere oplossingen zijn. Dat is precies wat de makers van YOLOKit dachten toen ze deze handige bibliotheek maakten. De slogan van YOLOKit is Stichting heerlijk opsommen en zij menen het.
YOLOKit toevoegen aan een Xcode-project is heel eenvoudig met CocoaPods. Neem de pod op in het Podfile van uw project, voer het uit pod update
vanaf de opdrachtregel en importeer YOLO.h
waar je YOLOKit wilt gebruiken.
Als u geen CocoaPods gebruikt, downloadt u de bibliotheek van GitHub, voegt u de relevante bestanden toe aan uw project en importeert u de header van YOLOKit.
YOLOKit heeft veel te bieden, maar in deze snelle tip concentreer ik me alleen op een paar methoden die YOLOKit in zijn repertoire heeft.
Laten we beginnen met het eenvoudig uitpakken van de minimum- en maximumwaarde van een array. Bekijk het volgende codefragment om te zien hoe het werkt.
NSArray * nummers = @ [@ (1), @ (2), @ (45), @ (- 12), @ (3.14), @ (384)]; // Minimum id min = numbers.min (^ (NSNumber * n) return n.intValue;); id max = numbers.max (^ (NSNumber * n) return n.intValue;); NSLog (@ "\ nMIN% @ \ nMAX% @", min, max);
Het bovenstaande codefragment resulteert in de volgende uitvoer.
MIN -12 MAX 384
De syntaxis kan vreemd lijken en u vraagt zich misschien af waarom min
en max
neem een blok, maar dit voegt feitelijk meer kracht toe aan deze methoden. Je kunt doen wat je wilt in het blok om te bepalen wat de minimum- en maximumwaarde van de array is. Het volgende voorbeeld moet dit verduidelijken.
NSArray * words = @ [@ "this", @ "is", @ "a", @ "example", @ "for", @ "everyone"]; // Minimum-ID kortste = words.min (^ (NSString * n) return (NSInteger) n.length;); id longest = words.max (^ (NSString * n) return (NSInteger) n.length;); NSLog (@ "\ nSHORTEST% @ \ nLONGEST% @", kortste, langste);
Dit codefragment resulteert in de volgende uitvoer.
SHORTEST a LONGEST everyone
YOLOKit is flexibel en klaagt niet over het type blokargumenten. Om echter aan de compiler te voldoen, werpen we de retourwaarde van het blok naar NSInteger
, omdat dat is wat het verwacht.
Er zijn een aantal methoden om arrays te filteren, inclusief kiezen
en afwijzen
. Laten we eens kijken hoe we de reeks getallen en woorden die we eerder hebben gemaakt, kunnen filteren.
NSArray * filtered Numbers = numbers.select (^ (NSNumber * n) return n.intValue> 10;); NSLog (@ "FILTERED NUMBERS \ n% @", filteredNumbers); NSArray * filteredWords = words.reject (^ (NSString * n) return n.length <= 2; ); NSLog(@"FILTERED WORDS\n%@", filteredWords);
Je moet toegeven dat dit erg leuk is om naar te kijken. Het is beknopt en zeer leesbaar. De arrays in de bovenstaande voorbeelden zijn eenvoudig, maar houd er rekening mee dat u arrays kunt gebruiken die veel complexer zijn dan dit. Het volgende voorbeeld illustreert dit.
NSArray * people = @ [person1, person2, person3, person4, person5, person6]; NSArray * mannetjes = people.select (^ (persoon * p) return p.sex == 0;); NSArray * vrouwtjes = people.reject (^ (persoon * p) return p.sex == 0;);
YOLOKit definieert ook eerste
en laatste
, maar ze doen niet wat je van hen verwacht. Met andere woorden, ze zijn niet equivalent aan NSArray
's firstObject
en lastObject
methoden. Met eerste
en laatste
u kunt een subarray van de oorspronkelijke array maken. Bekijk het volgende voorbeeld.
NSArray * subsetNumbers = numbers.first (3); NSArray * subsetWords = words.last (2); NSLog (@ "SUBSETNUMMERS \ n% @", subsetNummers); NSLog (@ "SUBSET WORDS \ n% @", subsetWords);
Het bovenstaande codefragment resulteert in de volgende uitvoer.
SUBSETNUMMERS (1, 2, 45) SUBSET WOORDEN (voor iedereen)
Het sorteren van een array is triviaal met YOLOKit. Laten we eens kijken wat er nodig is om de reeks getallen die we eerder hebben gemaakt te sorteren. Het is zo makkelijk.
NSArray * sortedNumbers = numbers.sort; NSLog (@ "% @", gesorteerde nummers);
Een van de voordelen van het gebruik NSSet
is dat het geen dubbele objecten bevat. Het uitpakken van een reeks objecten is echter triviaal met YOLOKit. Laten we een paar extra nummers toevoegen met YOLOKit's concat
methode en dan uniek de array met uniq
.
// Concatenate numbers = numbers.concat (@ [@ 1, @ 2, @ 3, @ 4]); NSLog (@ "CONCAT% @", nummers); // Uniek & Sorteer nummers = numbers.uniq.sort; NSLog (@ "UNIQ% @", nummers);
Heb je gemerkt dat ik de array ook heb gesorteerd door hem te ketenen uniq
en soort
? Het doel is om Objective-C-code niet in Ruby of JavaScript te veranderen, maar ik ben er zeker van dat u het ermee eens bent dat dit codefragment beknopt is en zeer gemakkelijk te lezen en te begrijpen is..
// Reversing NSArray * reversedNumbers = numbers.reverse; // Shuffling NSArray * shuffledWords = words.shuffle; NSLog (@ "REVERSED \ n% @", reversedNumbers); NSLog (@ "SHUFFLED \ n% @", shuffledWords);
Het bovenstaande codefragment resulteert in de volgende uitvoer.
REVERSED (384, "3.14", "-12", 45, 2, 1) SHUFFLED (voor iedereen is dit bijvoorbeeld, a, dit)
Er zijn veel andere methoden om met arrays te werken, zoals draaien
, monster
, zonder
, reeks
, transponeren
, etc. Ik moedig je aan om YOLOKit op GitHub te doorzoeken om meer over hen te weten te komen.
Er zijn ook methoden die kunnen worden gebruikt NSDictionary
, NSNumber
, en NSString
. In het volgende codefragment ziet u hoe u een tekenreeks kunt omzetten in een reeks woorden.
id wordsInString = @ "Je leeft maar één keer. Juist?". split (@ ""); NSLog (@ "STRING% @", wordsInString);
STRING (Jij, alleen, leef, "een keer.", "Klopt dat?")
Vanwege de oneven syntax van YOLOKit, zal Xcode niet veel helpen als het gaat om het aanvullen van code. Het zal je een lijst met suggesties voor YOLOKit's methoden laten zien, maar dat is het zo'n beetje. Als u YOLOKit wilt gebruiken, moet u de syntaxis leren.
YOLOKit is niet geoptimaliseerd voor prestaties zoals dit GitHub-probleem laat zien. Het maakt je code echter mooier en leesbaarder. Met behulp van een voor
lus om over een array te lopen zal sneller en performanter zijn dan de YOLOKit-methoden en het is belangrijk dat u dit in gedachten houdt.
Raad ik YOLOKit aan? Ja en nee. De bovenstaande overwegingen mogen u er niet van weerhouden YOLOKit te gebruiken, maar zorg ervoor dat u YOLOKit niet gebruikt als de prestaties belangrijk zijn, omdat er betere opties beschikbaar zijn, zoals de goede ol. voor
lus.
De lange van de korte is dat je YOLOKit alleen zou moeten gebruiken als je denkt dat het waarde toevoegt aan je project. Bedenk ook dat uw collega's de syntaxis van YOLOKit moeten leren en waarderen. Ik denk dat YOLOKit een geweldig project is dat duidelijk laat zien hoe ongelooflijk expressief Objective-C kan zijn. Voor mij is dat de belangrijkste les die ik wegneem van YOLOKit.