Tag: 编程技巧

自行车之路:我在App Store中的第一个应用程序

大约七个月后,Cycles取得了令人难以置信的成功: 在顶级生产力应用程序中,周期已达到第3位。 循环已被许多站点(例如Mashable和 AppAdvice) 使用和审查 。 周期已从App Store下载32,000多次,并且仍在增长。 是的,没错,我每天都在不断地研究自行车。 虽然我确实认为该应用程序具有巨大的初始启动能力,但始终存在改进的空间。 得出我最后的建议: 您的应用程序永远不会感到完成,那就可以了! 您为此花费了很多时间和精力,因为您对此充满热情。 我想花时间说谢谢您阅读本文,希望我以一种或多种方式为您提供帮助。 我很乐于回馈社区,因此,如果您有任何疑问,疑虑,反馈,或者只是想说声嘿,请随时通过社交媒体(下面链接)与我联系。 我也喜欢Twitch上的流媒体! 我已经开始在Cycles和其他副项目上流式传输更新进度。 请随时出来打个招呼或询问任何开发问题。 看我流!

这些简单的步骤使您的iOS应用程序易于阅读。

优秀的程序员会以最简单的方式解释自己的工作。 甚至物理学家也用一张纸和一根铅笔在虫洞中进行解释。 是什么使我们与众不同? 我一直试图编写尽可能简单易读的代码,从为变量选择正确的名称到使用代码约定,但是仍然缺少某些东西,这是一种无需试图理解“如何我做到了,但我却想实现这一目标。 您甚至可能会说 将代码读为一个故事 ,而不是一堆代码。 让我们解决3个主要主题: 阅读其他程序员的代码可能是一场真正的斗争。 如果没有提供适当的上下文,人们只会发现他迷失了寻找功能或特性的含义。 从1和0到底层代码再到高级语言,值得注意的是,代码语法变得越来越人性化,从而吸引了新的程序员进入开发人员的视野。 随着语法变得更加清晰,以通俗易懂的英语阅读,所以我们的代码应该简单明了并且易于说明。 编写良好的代码会将自己掩盖为一个故事,使其易于阅读和理解(即使没有上下文)。 命名功能 如何正确使用它: 当我们编写函数时,我们假设阅读函数的人有足够的背景知识来理解我们试图实现的目标。 用“ handleRedView()”来命名我们的函数会引起很多关于“ RedView”代表什么的问题? 此功能的主要目标是什么? 似乎在某些情况下 , 功能目的含糊且过于复杂,无法在不提供上下文的情况下进行理解。 我们可以将功能建议分为4类: 1.线人功能 2.管理职能 3.路由器功能 4.执行功能 1.线人功能 通常触发路由器/管理功能。 功能示例: 回调函数,通知发生了某些事情/将要发生的事情,并为您提供了做出反应的选项。 通常用作委托触发操作或通知处理功能。 2.管理功能 用于组合多个功能以实现1个更高的目的而无需依赖, 该块内的所有代码都将执行。 阅读此功能后,我们将获得所需的所有信息,并在汽车启动时执行此功能,此时,我们不在乎“如何”完成工作,而在乎“做什么”。 3.路由器功能 用于将多种功能结合起来,以某种依赖性实现更高的目标1, 的 代码仅在意图时执行。 路由器功能主要指向 执行 功能,但在某些情况下,仅当代码不超过1行时,才可以包含逻辑本身。 4.执行功能 执行 功能 名称。 逻辑本身可能很容易理解,但是我们已经在名称中声明 了该功能的功能 ,该功能打开了外部灯,该功能检查了灯泡是否烧毁,了解这可以在将来简化查找错误的过程,并使其更容易向函数添加逻辑而不更改其名称。 最终,在将这些想法实现到您的应用程序中之后,您应该在类部分中将对象与信息人 , 管理者和路由器功能组织在一起。 以及扩展块中的所有执行/逻辑都在同一文件中。 […]

Swift中的泛型…

泛型或泛型编程是swift的强大功能之一,它使我们能够编写灵活且可重用的函数和类型,例如( Classs,Structs,enums )仍保持类型安全。 快速地,我们使用数组,字典和可选类型的类型是泛型类型。 泛型在声明时需要类型参数。 当创建Generic类型的实例时,我们为type参数指定实际类型,以使实例成为具体类型,从而提供Type-Safety。 感谢Swift的Type-Safety和Type推断,这使Generics的工作变得非常容易。 DRY原理是通过在我们的代码中适合的任何位置使用泛型来实现的。 您可以编写避免重复的代码,并以清晰抽象的方式表达其意图。 注意:mutating关键字用于更改结构或枚举的自身属性。 如果有任何func试图更改其自己的类型属性,我们需要在func定义之前使用mutating关键字。 在上图中,在定义扩展名时,我们没有为正在扩展的类型设置类型。 无需再次指定扩展类型。 我们可以使用类类型以及上面示例中使用结构的方式。 具有通用约束: 有了约束,我们可以通过允许我们要使用的类型来限制可访问性。 如果尝试传递不满足约束的值,则会出现以下错误。 在下面的示例中,我们限制了where子句,因此我们可以实现更严格的类型安全性… 我们可以通过指定related -type,在协议中使用通用类型,如下所示。 我们可以通过将关联类型限制为必需或允许的类型来进一步限制关联类型。