DO iOS University ’18的3个重点

几周前,我参加了由CocoaHeadsNL主办的今年在阿姆斯特丹举行的DO iOS会议的第一天。

这也被称为“大学时代”,这是丹尼尔·斯坦伯格(Dim Sum Thought)的作者,培训师和开发人员丹尼尔·斯坦伯格(Daniel Steinberg)在函数编程方面进行的实验性研讨会,在剧透警告时,他是一位出色的演讲者。 Daniel在iOS方面具有深厚的背景,并且对函数式编程非常熟悉。 (很酷的事实:在成为开发人员之前,他曾经是数学教授。)

粗略地说,会议包括一些很简单的东西,一些是中间的东西,有些是某种魔术。 在此博客中,我将分享精彩集锦,以及当天的一些最佳提示,技巧和提示。

*要阅读我们在DO iOS系列文章的第2部分,请单击此处


首先:函数编程的一些很酷的功能,例如将函数链接到先前函数的结果。 信不信由你,下图是一个包含多次执行“ F”的闭合结构的结构。 之所以有效,是因为每个函数都返回该结构本身的实例。 真好!

该变量称为“ f”,它是名为Picture的结构的一个实例,其中包含一个作为属性的闭包(闭包绘制一个“ F”)。 实际上,只需调用f即可创建第一张图片,如下所示:

  F 

相反,第二个是通过调用:

  f.quad(空白,f.rotate(),f).quadFlip().quadRotate().quadRotate() 

这里的关键是每个函数( rotate()quadFlip()quadRotate()返回Picture的实例,从而允许您以功能性方式运行更多转换。

接下来,我们讨论了Swift中几个比较基本的功能编程函数,例如.sorted() .split().map() 。 一些创建Swift的开发人员具有此类编程的背景,因此这是今天值得欢迎的补充。

小组中的几乎每个人以前都曾经听说过这些功能,或者曾经使用过这些功能-但是即使如此,Daniel仍可以向我们展示如何使用它们的原始方法。 例如:为了弄清楚句子“ 我看见的是猫吗? ”是回文(向后读取与向后读取相同),您可以编写一个循环以将第一句话的第一个字母与第二句话的最后一个字母进行比较(在小写并删除标点符号之后)。 如果您可以正常工作,则可以执行以下操作:

  zip(string,string.reversed()).map(==).reduce(true){(累加器&&元素中的(累加器,元素)} 

我们还手动实现了一个map函数,以查看引擎盖下发生的事情,这既简单又酷。 在对其进行抽象之后,Daniel遵循了以下建议:

“编写抽象时,应从具体到抽象。”


咖啡-还是茶歇! (我是每个办公室都有一个茶人)。


让我们提高水平! 休息后,我们练习实现自定义集。 但是,此集只存储一个包含闭包的变量,而不是存储值。 它看起来像这样:

  struct MySet  {让包含:(T)-> Bool} 

要点: 为变量选择一个好名字 。 Daniel甚至开玩笑说MySet有多糟糕,他说:“您应该与团队进行命名讨论。” 很难确切地确定什么是好名声(这就是为什么要讨论好名声的原因)–但是根据经验, 好的代码可以像散文一样读取:变量应该是名称,函数应该是动词。

回到MySet :看起来有点陌生,但是它允许您创建一个包含所有符合contains.的集合contains. 例如,如果要显示一组中的所有偶数:

  let evenNumbers = MySet (包含:{x in x%2 == 0}) 

Xavi踏板
The Mobile Company的Mobile Dev。 从巴塞罗那移居加入我们的团队。 喜欢用代码制作很棒的东西,并以花生酱为燃料。

我们是一家屡获殊荣的阿姆斯特丹移动代理,与领先的公司和知名品牌合作,为数百万用户创建应用。 我们发布有关炫酷技术,出色项目和其他有趣内容的信息。 跟上来? 联系我们。 想与我们合作? 我们正在招聘。

如果您喜欢这篇文章,请单击👏并帮助其他人查找和阅读!


最初于 2018年12月14日 themobilecompany.com 发布