当前位置: 首页 > 科技观察

iOS开发指南:HaveaGoodTimewithYOLOKit_0

时间:2023-03-17 14:35:43 科技观察

【译文】在Objective-C中枚举集合通常是乏味和笨拙的。如果您曾经在Ruby或JavaScript中使用过Underscore或Lo-Dash,您就会知道这些类型的任务有更好的解决方案。YOLOKit应运而生,它的创造者希望利用这个精巧的库为用户解决问题。YOLOKit的口号是“用一种简单的方式解决枚举问题”,它也正是这样做的。1.安装您可以使用CocoaPods轻松地将YOLOKit添加到Xcode项目中。只需将pod添加到开发项目的Podfile中,通过命令行运行podupdate,然后将YOLO.h导入到我们要使用YOLOKit的位置即可。如果你不打算使用CocoaPods,也可以直接从GitHub下载这个库,将相关文件添加到项目中并导入YOLOKit头文件。2、使用YOLOKitYOLOKit提供了很多实用的功能,但是限于篇幅,我们将重点讨论YOLOKit中的一些方法。最小值和最大值让我们从如何从数组中提取最小值和最大值的简单问题开始。请阅读以下代码片段以了解其工作原理。NSArray*numbers=@[@(1),@(2),@(45),@(-12),@(3.14),@(384)];//Minimumidmin=numbers.min(^(NSNumber*n){returnn.intValue;});idmax=numbers.max(^(NSNumber*n){returnn.intValue;});NSLog(@"\nMIN%@\nMAX%@",min,max);上面代码片段的执行结果如下图所示。MIN-12MAX384的语法可能看起来有点奇怪,你可能想知道为什么min和max要组成一个块,但实际上,这种做法可以带来更强大的功能。你可以在块中添加任何东西来检测数组中的最小值和最大值是什么。下面的例子应该足以消除任何疑虑。NSArray*words=@[@"this",@"is",@"a",@"example",@"for",@"everyone"];//Minimumidshortest=words.min(^(NSString*n){return(NSInteger)n.length;});idlongest=words.max(^(NSString*n){return(NSInteger)n.length;});NSLog(@"\nSHORTEST%@\nLONGEST%@",最短,最长);此代码片段产生以下输出。SHORTETaLONGESTeveryoneYOLOKit非常灵活,对block参数的类型没有做任何要求。但是,为了满足编译器的需要,我们需要将block的返回值传递给NSInteger。FilterArraySelection&Rejection过滤数组的方法有很多种,包括选择和拒绝。让我们来看看如何在之前创建的数组上过滤数字和单词。NSArray*filteredNumbers=numbers.select(^(NSNumber*n){returnn.intValue>10;});NSLog(@"FILTEREDNUMBERS\n%@",filteredNumbers);NSArray*filteredWords=words.reject(^(NSString*n){returnn.length<=2;});NSLog(@"FILTEREDWORDS\n%@",filteredWords);不得不承认,上面的代码看起来非常精辟——可以说是简洁明了。在前面的示例中,数组内容相对简单,但请注意,您可以使用比这复杂得多的数组。以下示例演示了这一点。NSArray*people=@[person1,person2,person3,person4,person5,person6];NSArray*males=people.select(^(Person*p){returnp.sex==0;});NSArray*females=people。reject(^(Person*p){returnp.sex==0;});子数组YOLOKit也定义了first和last,但是它们的实际作用和大家的预期不一样。换句话说,它们不等同于NSArray中的firstObject和lastObject方法。借助first和last,可以在原数组中创建子数组,具体见下面的例子。NSArray*subsetNumbers=numbers.first(3);NSArray*subsetWords=words.last(2);NSLog(@"SUBSETNUMBERS\n%@",subsetNumbers);NSLog(@"SUBSETWORDS\n%@",subsetWords);执行上述代码片段会产生以下输出。SUBSETNUMBERS(1,2,45)SUBSETWORDS(for,everyone)操作ArrayNumberSort数组排序在YOLOKit眼中是小菜一碟。让我们看看它如何对先前创建的数组进行数字排序。很简单:NSArray*sortedNumbers=numbers.sort;NSLog(@"%@",sortedNumbers);唯一内容过滤使用NSSet的好处之一是它不会包含重复的对象。然而,对YOLOKit来说,对象数组上的独特内容过滤也很容易和愉快。让我们使用YOLOKit的concat方法添加一些额外的数字,然后使用uniq过滤数组以获取唯一内容。//Concatenatenumbers=numbers.concat(@[@1,@2,@3,@4]);NSLog(@"CONCAT%@",numbers);//Unique&Sortnumbers=numbers.uniq.sort;NSLog(@"UNIQ%@",数字);不知道大家有没有注意到,我用uniq和sort来过滤不重复的内容,同时也完成了排序工作。我们的目标不是将Objective-C代码转换为Ruby或JavaScript,但您可以肯定,您也能感受到上述代码片段的简单性和易读性。反转重组//ReversingNSArray*reversedNumbers=numbers.reverse;//ShufflingNSArray*shuffledWords=words.shuffle;NSLog(@"REVERSED\n%@",reversedNumbers);NSLog(@"SHUFFLED\n%@",shuffledWords);上述代码片段执行后的输出如下。REVERSED(384,"3.14","-12",45,2,1)SHUFFLED(for,is,everyone,example,a,this)还有很多方法可以用来处理数组,包括rotate,sample,without,set,transpose等。我建议在此处查看GitHub网站上的YOLOKit部分以了解更多详细信息。其中一些方法也可以与NSDictionary、NSNumber和NSString一起使用。以下代码片段显示了我们如何将字符串转换为单词数组。idwordsInString=@"Youonlyliveonce.Right?".split(@"");NSLog(@"STRING%@",wordsInString);STRING(You,only,live,"once.","Right?")3.注意Itemcodecompletion由于YOLOKit的语法比较怪异,Xcode在相关的代码补全上帮不上什么忙。它将为我们提供YOLOKit的方法建议列表,仅此而已。如果你打算使用YOLOKit,你必须先仔细研究它的语法结构。性能你可以在GitHub提供的示例中看到(点击这里),YOLOKit并没有针对性能进行优化。但它确实让我们的代码更漂亮、更易读。请记住,使用for循环遍历数组可以带来比YOLOKit方法更快更好的性能。总结那么我是不是推荐大家使用YOLOKit呢?两者都不是。上面提到的负面因素不应该成为大家拒绝使用YOLOKit的理由,但请务必在使用YOLOKit之前认真考虑性能的重要性,尤其是如果有其他更好的选择——比如优秀的for循环。长话短说,您应该在可以确保它为您的项目带来预期价值的情况下使用YOLOKit。此外,我们还需要意识到,我们的选择会迫使同事学习和适应YOLOKit的语法习惯。我认为YOLOKit是一个了不起的项目,这在Objective-C实践中得到了最好的证明。就个人而言,这也是我从YOLOKit中学到的最有价值的资产。原文链接:http://code.tutsplus.com/tutorials/having-fun-with-yolokit--cms-21277原文标题:HavingFunwithYOLOKit核可乐翻译