Tag: The Andela Way

Swift中的闭包:续集

自从我开始学习Swift闭包以来,我发现自己实际上正在寻找它们,并尝试将它们更频繁地注入我的作品中。 我本着同样的精神涉足函数式编程 不可避免地 高阶函数 。 函数式编程已成为更高级的编程方法之一,它已成为摆在桌面上的一席之地。 但是,这与功能编程无关。 这是关于我对闭包的学习; 它们如何在高阶函数中使用,以及扩展后,它们在函数编程中的作用。 如果您尚未探索函数式编程,建议您这样做。 将您的🐽放到那里,看看是否喜欢它。 你知道他们在说什么,没有有害的知识。 本文主要借鉴了Ray Wanderlich的本教程,主要是因为我发现它很好地解释了并且阅读起来很有趣。 Ray Wanderlich的教程难道不是很棒吗? 🙌 要继续学习本章,您需要基本的闭包知识。 不是你的茶吗? 不用担心,当我的学习也不是我在这里喝茶的时候,我就写下自己的学习内容。 在进行函数编程之前,让我们回到舒适的区域。 这是我们最常使用的东西。 您有一个列表,想要遍历该列表并执行某些操作。 您将做什么,请召唤for循环! 这就是所谓的命令式编程 。 这看起来很整洁,您了解它并且很容易编写。 那么,为什么要解决未损坏的问题呢? 这就是为什么! 释放🐉,我的意思是声明性的! 上面的示例实际上只是一行代码,它很简洁,即使现在看起来不太像,但编写起来却容易得多。 这些只是我们看到的一些优势,我们将在进行过程中探讨其他更大的优势。 我有你的兴趣吗? 现在我们可以尝试定义什么是功能编程。 函数式编程是谁? 函数式编程是专注于数学计算并避免状态和可变数据的范例。 一旦避免了状态数据和可变数据,我们将转向高阶函数来填补空白。 与定义高阶函数一样,这似乎是一个好时机。 高阶函数 高阶函数是接受其他函数作为参数,可以返回一个函数或同时返回两者的函数。 当我们在这里探索闭包时,我们提到闭包被称为高阶函数functions。 上面有一个小问题,我们将使用它来查看几个高阶函数。 这是一个书店模型。 有各种组成部分的书籍和书籍清单。 地图 这是一个闭包 , 接受一个函数作为其参数,并在将函数应用于数组中的每个元素后返回 长度相同 的数组 。 问题1 我们希望在我们的小书店中获得所有书名的列表。 我们该怎么做呢? 势在必行? […]

Swift 4中的属性观察器didSet和willSet

在本文中,我们将研究快速的属性观察器。 根据Apple的文档: 财产观察员观察并响应财产价值的变化。 每次设置属性值时都会调用属性观察器,即使新值与属性的当前值相同也是如此 。 让我们看一下下面的代码片段,以帮助我们更好地了解属性观察者willSet和didSet的工作方式。 从上面的屏幕截图可以看出,在设置person属性之前,将首先调用willSet中的代码。 在设置person属性后, didSet将立即被调用。 这就是为什么我们可以访问didSet中的person属性, 而这在willSet中是不可能的。 同样从代码中,您可以看到我在willSet观察器中使用了自定义参数名称。 您可以随意使用自己的自定义参数名称覆盖默认参数名称。 关于属性观察器的另一件事要注意的是:不能在惰性变量上使用属性观察器,因为只有在程序中调用了惰性变量后 , 惰性变量才能正确初始化并分配给内存。 示例如下所示: 惰性变量名称=“约翰” print(“我的名字是\(名字)”) 仅在上面的print语句中调用了变量名后,该变量名才会得到正确的初始化和分配的内存。 这违反了属性观察者的目的,因为具有观察者的属性需要具有初始值 。 每当属性值更改时,这将使它能够跟踪更改。 当您必须跟踪属性以确定值何时更改以执行某些逻辑时,就需要属性观察器 。 因此,您可以将其抽象为willSet和,而不是使用某些函数来检查属性的值以执行某些操作。 当值设置为所需值时,让它执行逻辑。 相信阅读完本文后,您现在对Swift中的属性观察器如何工作有了更好的了解。 感谢您的阅读,并随时在下面提出任何意见或问题,我将为他们解答。

iOS中的架构模式

在最近的过去,我一直在花一些时间来了解大多数软件开发人员所犯的菜鸟错误。 老实说,我经常被召唤。 但是,我最内gui的一个错误是,在开始项目之前没有计划。 这对我们最好的人来说已经发生了。 从第一天开始,您就可以开始这个令人惊叹的全新闪亮项目。 这个项目的成功,潮起潮落可以这么说。 通常,这种兴奋会击中应该做出合理决策的大脑部分。 因此,您该怎么做,您会立即开始编写代码。 五天后,该项目开始呈螺旋式下降。 您开始想象自己对这个项目的判断有误。 毕竟,这可能不是一个很酷的项目,也许这是一个很好的旧诱饵和转换案例。 但是事实是,您就是问题所在。 这不是项目,从来没有。 该项目保持不变,是您改变了。 💔如果您不计划,那么很可能会迷失其中。 兴奋消散之后,您将得到的只是意大利面条代码。 然后,您很可能会放弃它,或者更糟糕的是,仍然编写可怕的,没有灵感的代码。 现在我们已经大声疾呼了,让我们看一下要计划的最重要的事情之一。 所有冰雹建筑模式! 👯 您问什么架构模式? 它是对常见问题的通用可重用解决方案。 你为什么要关心它? 架构模式使您和您的团队成员的工作更加轻松。 由于关注点分离,因此更容易调试和浏览代码库。 哇! 那是很多单词,没有代码。 现在您仍然在这里,我将为您提供一些代码。 🎉 聊够了,给我看看代码!!! MVC 我们将从这个非常常见但被误解的模式start开始。 MVC已经存在了很长时间。 您知道MVC,这就是隔壁的低维护模式。 如果您已经编写了iOS代码,则可能使用了MVC模式。 这是构建iOS SDK的模式。 这种模式将所有代码分为模型,视图和控制器。 模型; 这是数据所在的位置。 它负责持久性,建模对象和解析。 视图; 这负责与用户进行交互的所有内容,即在屏幕上看到的内容,例如标签和文本字段。 控制器; 这在模型和视图之间进行中介。 MVC示例 如上所示,该模型基本上是对数据进行建模。 在此示例中,它将膳食数据项描述为具有两个属性。 在此示例中,视图和视图控制器紧密耦合。 如果有人要问MVC中的视图和视图控制器之间有什么区别,我会说我不确定。 因此,MVC无法分离关注点 。 由于视图控制器趋于庞大并且几乎无法导航,因此它被命名为Massive View Controller。 […]

Swift:在两分钟内了解变异函数

如果您曾经尝试过在Swift的类方法中使用mutating关键字 ,则编译器肯定会对您大喊大叫,因为您做错了什么。 迅速地,类是引用类型,而结构和枚举是值类型 。 默认情况下,不能在其实例方法中修改值类型的属性。 为了修改值类型的属性,必须在实例方法中使用mutating关键字 。 使用此关键字,您的方法便可以更改属性的值,并在方法实现结束时将其写回到原始结构。 以下是Swift中Stack的简单实现,说明了变异函数的用法。 我相信这很容易理解。 但是,如果您需要任何澄清或问题,请在下面给我留言,我将为您解答。 谢谢阅读。

Swift中的闭包

在过去的九个月里,我一直在学习Swift。 说我正在爆炸是轻描淡写。 但是,每当我要举行快速聚会时,街上都会有一辆警车在等着将其关闭。 噢,封锁,谁伤害了你? 所以我最终决定学习闭包,并考虑记录我的奋斗 , 学习和最后的阿哈时刻 。 这些大多数都是我从不同来源学到的东西,但发现自己希望自己在一个地方找到。 这些内容包括但不限于Bob the Dev的博客,快速的文档以及有关Medium的惊人文章。 为什么叫名字? 闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。 这被称为关闭它们,因此被称为closures。 您看起来很熟悉,我以前在哪里见过您? 闭包由于其干净且经过优化的语法而处在许多地方。 您可能在什么时候遇到过他们; 使用动画; 这是因为某些功能是异步执行的。 这是使用escaping闭包的绝佳机会。 从第三方API获取数据; 这也是使用escaping闭包的另一个绝佳机会。 在视图控制器之间传递数据 Swift的许多内置函数都需要关闭。 这是一个; 闭包函数 Apple将闭包定义为传递的自包含功能块。 在我们过于技术化之前,我们可以了解如何将函数转换为闭包。 这是一个简单的函数,用于查找必须学习闭包的时间。 它需要两个参数, days和name然后返回一个字符串,告诉我我还剩下多少天。 优雅吧? 😃 将其转换为闭包; 除去花括号 当然,如果您尝试按原样运行上述代码段,则会收到错误消息。 这是介于闭包和函数之间的东西,也许我们可以称其为乐趣。 没有? 好的! 😄 在参数列表和正文之间(即在String和return之间)添加关键字 这仍然有一个错误。 尽管这是一个有很多观点和观点的有争议的声明,但闭包本质上是无头函数。 因此,我们取出头部😈。 在这种情况下,头部很func learnClosures 还是不运行? 用花括号将其包围 most。 这是最冗长形式的所谓闭包表达式。 稍后我们将看到,您可以将其精简为一行。 现在,我们基本上已经声明了一个闭合,但是没有一种调用它的方法。 解? 我们将其分配给变量。 […]

Swift入门

您是iOS的新手。 您想将脚趾伸入iOS开发令人兴奋的世界。 但是,当您进行窥视时,会遇到作为Objective-C的大灰狼。 不用担心,Swift可以节省时间。 当我第一次进入iOS时,我是一个新手,只有三个月的Python编程经验。 我很害怕这么快做出这种转变对我意味着什么。 但是,一旦我进入了Swift,我就陷入了爱河。 我发现它仍然很容易阅读,但同时又拥有使一种语言令人兴奋使用的Pizzazz。 另一方面,由于Objective-C的总体构造方式,它被证明具有一定的学习曲线。 让我们比较一个示例Objective-C类和一个Swift类。 目标C 用Objective-C编写类可能有些艰巨。 这是因为Objective-C需要每个类的实现文件和头文件。 头文件(.h) #import @ class ThisTest; @ interface ThisTest:NSObject @ 属性 (非原子)NSString * objectiveCString;-( void )someMethod; @ end 实施(.m)文件 #import“ ThisTest.h” @ 实现 ThisTest NSString * objectiveCString = @“ some string”;-( void )someMethod { NSLog (@“这是打印方式”);} @ end 当我刚开始的时候,我觉得这很吓人。 当我最终着迷于协调变量和方法的命名,弄清楚什么去哪里以及整个导入业务时,它也被证明很忙。 迅速 使用Swift,我意识到我可以将所有内容都放在一个文件中,而将更多的精力放在逻辑上。 我所要做的就是找到一种创建将功能分组在一起的类的方法。 […]