Tag: 编程

如何:在Swift中映射,缩小和过滤

由Reinder de Vries撰写于2017年5月3日在App Development中 Swift的编程功能Map,Reduce和Filter可能难以挑战。 特别是,如果您总是编写for循环来解决迭代问题! Map,Reduce和Filter函数来自函数编程领域。 在Swift中,您可以使用Map,Reduce和Filter遍历诸如Array和Dictionary集合类型,而无需使用for循环。 在构建应用程序时,通常使用过程式或面向对象的编程方式。 函数式编程是不同的:它仅处理函数。 没有变量,没有“状态”,没有for循环-只是函数。 Swift编程语言非常适合于函数式编程。 但是,您无需严格地编写功能代码,只需采用功能编程中的概念(例如Map,Reduce和Filter)即可帮助您学习如何更好地编写代码。 Map,Reduce和Filter通常被称为高阶函数 ,因为这些函数将一个函数(一个闭包)作为输入,而将返回函数作为输出。 严格来说,Swift将在使用高阶函数时返回操作(即映射数组)的结果,而“纯”函数语言将返回函数的集合。 如果您在想:“伙计,我不需要功能编程或数据处理,因为我的应用程序不需要这样做!” —不要在这里停下来。 在最近的应用程序项目中,我多次使用过Map,Reduce和Filter: 过滤成本/收入值,使其达到一定阈值,然后再将其包含在折线图中 将成千上万的电影评分降低为一个平均评分 在此Photo App模板中的标签上映射一些操作(小写,删除“#”) 您当然可以通过for循环解决所有这些问题,但是您会发现使用map,reduce和filter函数可以使代码更简洁,可读性和性能更高。 在本指南中,您将学习如何使用地图,缩小和过滤功能。 您将对集合类型 (如Array执行这些功能。 以下是简要概述: map函数遍历集合中的每个项目,并对集合中的每个元素执行操作 reduce函数循环遍历集合中的每个项目,并将它们组合为一个值 filter函数遍历集合中的每个项目,并返回仅包含满足包含条件的项目的集合 换句话说: map功能将功能应用于集合中的每个项目。 考虑将一组值“映射”到另一组值。 reduce函数将一个集合变成一个值。 可以认为它实际上是将多个值减少为一个值。 filter函数仅返回通过if -statement条件且仅当该条件导致true的值的数组。 有趣的事实: MapReduce是基本的大数据处理概念,其中对集合并行执行密集操作。 一个示例是将一本书的页面概括为一个单词(映射),然后将这些单词存储在字母框中(减少)。 跳至相关章节: 使用地图功能 使用减少功能 使用过滤功能 链接图,缩小和过滤 结论 准备? 我们走吧! 成为专业的iOS开发人员 开始使用iOS 12和Swift 4 注册我们的iOS开发课程“ 零到App […]

了解Swift中的类型擦除

免责声明:本文的代码摘自 Mattt的 一本令人称奇的书, 名为《 Flight School Guide to Swift》 。 为了理解类型擦除,让我们看一个简单的例子。 假设我们有要解码的JSON。 JSON如下所示: { “ foo”:“你好”, “栏”:123 } 上面的JSON没有具体的类,因为我们不知道JSON将包含多少个键值对。 在Swift 4.0中,我们可以尝试使用JSONDecoder类,如下所示:

NS测量

快速说明-我将来所有的帖子都将发布在我的专用网站上,并且此出版物不再更新。 谢谢阅读! 对于软件工程师来说,度量单位,事物或项目并不总是最迷人的工作。 尽管不像编写高效的用户界面库那样令人振奋,也不如使网络代码轻松编织并发执行那样让人感到满足,但iOS中的度量单位仍然经常做错事。 一个人怎么能以一种国际化的方式而不是一个仓促的方式编写这样的代码? 基金会(通常如此)拥有答案。 从iOS 10开始 本周,我们来看一下NSMeasurement和朋友。 比你想像的更普遍 软件总是会出现一些情况,这些情况向用户展示了一些可测量或可量化的东西。 而且,当该软件(iOS)在全球数十亿设备上运行时,代表这些事物的国际化价值的需求不仅变得越来越重要,而且也变得至关重要。 正确地获得这样的度量和单位并不是基线经验,您应该只对软件有期望。 因此,这些API不仅有助于明显的“转换器”应用程序,而且还可以帮助游戏,购物清单以及介于两者之间的所有其他内容: 您代表时间的量度?️吗? 行驶了一段距离? 我们旅行的速度🗺? 物体的重量⚖️? 因此,在表面上使用简单的double类型的诱惑很有意义,并且在其他任何地方都可以打破: //从技术上讲,我们甚至为失败设置变量名 让里程旅行:双 NSMeasurement及其所有部门 在前面的示例之后,我们真正需要的是一个精确的,真实的结构来表示测量结果。 虽然里程数当然是一种度量,但在Murica的context语境中,通常仅是有意义的度量。 因此,基金会对测量的支持实际上是通用的: 公共结构Measurement 请注意,出于文体目的,并且由于我每天在Objective-C中进行编码,因此在本文中,我将使用带有NS前缀的框架进行引用。 所有这些对象都作为值类型和结构正确地桥接到Swift。 它提供了一种提供通用度量单位以及与之对应的值的方法。 它的初始值设定项将要求两个: 公共初始化(值:Double,单位:UnitType) 每个单位都将始终具有符号,尽管并非每个单位都具有尺寸,也不总是彼此等效。 当然,需要注意一点,但是最有可能使用尺寸单位。 但是,由于这个原因,NSUnit的指定初始化程序仅需要一个符号: 公共类单位:NSObject,NSCopying { 公共让符号:字符串 公共初始化(符号:字符串) } 对于NSMeasurement,此单位类型负责大部分工作,您可以通过其初始化程序定义要使用的单位,但更常见的是,您将使用Apple提供给我们的NSDimension(其子类为NSUnit)。 然后,每个尺寸单位将进一步降低到该单位内存在的给定尺寸。 例如,假设我们要测量时间。 我们的单位是持续时间,但是我们有几种表示持续时间的方法,例如秒,分钟和小时: 让abstractValue = 1.0 // 1秒 让秒=度量值(值:abstractValue,单位:UnitDuration.seconds) // 1分钟 let minutes =度量值(值:abstractValue,单位:UnitDuration.minutes) // […]

从初学者的角度来看Swift

随着新发布的Swift 5,现在是学习这种语言的好时机。 您对iPhone应用程序甚至MacOS应用程序有想法吗? Swift 5是您想要开始学习的知识,以使您朝正确的方向前进。 当然,您可以使用Objective-C编写应用程序,但是Swift越来越流行,并且似乎在总体上来说是一种更加容易的语言选择。 Xcode是一个免费的IDE,可以让您在几分钟之内启动并编写第一个应用程序(前提是您具有macOS)。 作为初学者,我将在开发我的第一个iOS应用程序时开始学习Swift的想法。 很多时候,当您学习一种语言时,都会从经验丰富的程序员那里获得意见,这些程序员在Swift方面拥有丰富的经验。 尽管这些信息是无价的,但其中很多信息可能会让您望而却步。 无论您是掌握几种语言,还是将Swift作为母语,我相信Swift都是很棒的。 Xcode IDE 在不首先提及Xcode的情况下如何谈论Swift? 有些人喜欢它,有些人讨厌它,但是在过去几周学习并习惯了它的功能之后,我不得不说我非常喜欢它。 这是一个设计精美的IDE,具有您期望的所有功能以及某些功能。 轻松管理文件和项目,并排打开多个文件,一个强大的调试器,甚至是一个称为Playgrounds的内置功能。 在操场上,您可以玩得开心。 在这里,您可以测试和试验代码并实时查看结果。 这是学习的绝佳工具。 语言文件 与大多数语言一样,您将可以从开发人员那里找到该语言的官方文档。 斯威夫特也不例外。 Apple免费提供了Swift编程语言和API设计指南。 它详细介绍了您需要了解的有关该语言的所有信息,并且对于您遇到的困难提供了重要参考。 这些文档是编程的新手或具有其他语言的丰富经验,将非常方便,只需轻按一下按钮即可使用。 语言的优雅 Swift绝对是一门美丽的语言。 有很多小事情使这感觉很现代。 作为使用这种语言的初学者,很多事情立即引起了我的注意。 这些事情可能不是特定于语言的,或者总体上不是很重要,但是它们在某些情况下改变了我的思维方式。 总体来说,这也增加了我编写Swift的乐趣。 类型推断 :与其他语言(如JavaScript或Python)一样,您可以声明变量而不必指定数据类型。 将表达式的结果保存在变量名中时,可以执行相同的操作。 Java,C ++和C#是我最熟练的语言,不必指定变量类型,这会有些新鲜。 结构体 :结构体是Swift中的命名类型之一,它允许您封装属性(局部变量)和方法。 如果您熟悉OOP(面向对象编程),则它们类似于类,但有一些区别。 在Swift中,结构没有继承。 这使结构更加简单,而不必担心您将继承的所有内容。 同样,结构是值类型,类是引用类型。 当将Stucts传递到参数中,放入数组中或什至分配给另一个变量时,它实际上是被复制的。 Swift中到处都有结构。 数组,整数,字典,甚至字符串都是Structs的一些示例。 记住这一点可以帮助您解决可能遇到的一些问题,或者至少可以改变您的书写方式。 可选项目:目前,我与可选项目之间存在一点爱恨交加的关系。 您将在Swift中随处可见这些内容。 可选参数将包裹一个值,例如Int,数据类型将显示为“ Int?”。 问号确实是表明它是可选项的好方法,因为您会问自己:“也许里面有一个Int?”。 绝对正确。 可选是带有两种情况的枚举。 它已设置或未设置。 […]

心情不好的雨燕4,1

与往常一样,当新版本的Swift出现时,我会通读手册并提出问题供审核。 因此,这里我们使用Strings。 如您所知,字符串再一次是集合类型,因此不再是.characters,对此我们可能都非常感谢。 如何创建多行字符串? 使用三引号 让x =“”“ 他说她说 然后更多 然后更多 “” 注意,绿色的新兵,是确定缩进从何处开始的BOTTOM三重引号。 您可以添加缩进,也可以添加\以将一行连接在一起。 从字符串中获取子字符串时,它是什么类型? 串? 不,温柔的灵魂,不是弦乐。 它是SubString。 字符串和子字符串共享什么协议? 他们共享StringProtocol。 哦! 这就是为什么字符串操作类型如此频繁地将StringProtocol类型作为输入吗? 就像你说的那样。 你比你看起来聪明。 很高兴知道默认情况下复制可确保始终在后台复制作为真正的14克拉值类型的字符串。 你看到我在那里做什么了吗? 并非总是在后台复制它。 它通常通过引用传递,并且仅在您要使String突变时才执行复制。 由于这个邪恶的小把戏,您将获得更多的性能提升。 如果可以的话,请稍作努力。 一点点ol’-razzle-dazzle三卡牌游戏。 为什么它是邪恶的? 这不是真的邪恶。 哇,您可以在字符串后附加一个字符! 像您一样使用+进行串联? 不,那太明显了。 您必须使用 aString.append(“C”) 方法。 什么是字符串互通? 我认为您的意思是字符串插值。 这只是意味着使用变量将一个字符串插入另一个字符串。 就像使用C和其他语言一样。 您可以通过字符数组创建字符串吗? 你肯定可以,甜蜜的脸颊。 刚把那个吸盘扔进弦里,嘿嘿。 你在骚扰我吗? 你要我吗 您想让我发出触发警告,以免引起皮疹或其他事情吗? 你的举止很差。 我做。 我度过漫长的冬夜,为他们而悲伤。 什么是扩展字素簇? 好吧,你成功地做到了。 它是一个或多个unicode字符的序列,导致一个字符,即一个和一个唯一的人类可读字符。 那么,是否要遍历每个Unicode标量来计算字符串中的人类可读字符? […]

Swift中的Hashable OptionSet

2018年8月29日·2分钟阅读 这篇文章解释了如何在Swift中创建一个OptionSet,该OptionSet还实现了Hashable协议。 这样,它可以在字典中使用。 即使它非常简单,我也无法在线找到一个文档化的示例,因此我认为我可以将其组合在一起。 我最近一直在使用Apple的SpriteKit开发一款游戏,并达到了实现和跟踪游戏内成就的地步。 reddit上的一个用户建议使用OptionSet来存储已解锁的成就,并使用Dictionary作为各种“成就百科全书” ,这真是一个不错的建议! 为了使这项工作可行,OptionSet还必须实现Hashable协议。 为什么对我的用例有意义: OptionSet使按位操作相对不费力,因此避免了头痛 我没有计划大量的成就(限制是整数的位数) 在UserDefaults中存储整数(OptionSet的rawValue)非常容易,而且存储效率高。 需要hashValue整数作为唯一(理想情况下)分析哈希内容的方式 ==函数比较散列。 此实现使用OptionSet的rawValue作为唯一指示符。 由于hashValue符合rawValue ,因此它在==函数中使用。 这样,我们可以将责任整合到hashValue中 。 但是,您也可以返回: 返回lhs.rawValue == rhs.rawValue 乔伊斯·马托斯(Joyce Matos)对Hashable的分解 最初在 nathanwillson.com上 发布 。

iOS开发入门指南

步骤1:学习环境应用 学习基础编程是使一切正常的基础。 例如,当出现问题时,也许我们会通过查找通过书籍学习的解决方案并在Google上搜索更多信息,或者向Stack Overflow询问您是否加入问题,或者您加入了Facebook社区或其他社区,这将有助于您解决问题。 会帮助您并与您分享知识,但是请相信我,这种方式不会使您变得容易,也将很难,因此我们必须了解他身后发生的事情。 您可以通过youtube上的两个学习视频来学习基本编程,其中已经介绍了使用非常简单明了的代码进行基本编程的方法。 我们可能已经阅读了许多有关iOS应用程序开发的教程和书籍。 但是您应该知道,没有什么比直接在应用程序中实现更好。 在开始开发之前,我们当然需要厨房工具,以及以下准备的工具: 拥有一个个人网站/苹果网站 -苹果鼓励开发人员建立一个个人网站,如果没有用户的反馈,则每个客户都可以直接与开发人员联系,而无需先经过苹果。 Mac或Macbook以及设备 —强烈建议使用Mac / Macbook,因为这是为了避免开发过程中的困难。 因为如果您用Hackintosh超越它们会出现很多问题,例如不兼容或其他工具。 IOS开发人员注册 —通过developer.apple.com向iOS开发人员注册 ,年费为99美元,其中验证过程大约需要2天。 当然,扩大开发人员的规模是昂贵的,更不用说学生了:D,但是当我们进行开发时,一切都会被错过。 我认为,主要原因之一是Apple为开发人员提供的功能,例如iCloudnya。 在此处阅读有关iCloud的更多信息。 Registarsi iTunes —在将下一个经过验证的帐户注册到itunesconnect.apple.com之后,该帐户旨在稍后将我们的应用程序注册到App Store。 这些都是填写表格,例如信用卡,应用程序购买,游戏中心,税收和银行业务。 Xcode —这是我们用于iOS应用开发的主要IDE,必须在安装之前进行安装。 第2步:学习语言编程(敏捷或客观c) MVC编程层次结构 要了解该应用程序的工作方式,您需要了解其编程架构。 Xcode以模型,视图,控制器(MVC)为基础 ,可以将您的所有显示和接口代码与逻辑和处理功能区分开,并且实际上没有其他选择。 MVC乍一看似乎令人困惑,但是如果您试图理解它并开始构建一些基本应用程序,那么您会喜欢上该结构的。 步骤3:了解IOS开发 假设您已经知道SWIFT / Objective — C,再次添加也必须了解iOS开发的来龙去脉,这意味着我们必须了解如何制作: 创建构建视图(使用情节提要,xibs或programmaticallu)。 创建用户交互(如按钮,开关,滑块等)。 在视图表中显示数据 显示警告 视图之间的导航和过渡 显示图片,标签和文字 将应用程序与REST API集成在一起,并在iOS上解析JSON。 上述所有关键字将在“ iOS开发印度尼西亚教程”系列中进行讨论。 您可以通过以下参考链接来支持上述教程系列。 可可控制 开源库 Facebook社区 […]

简单的UIViewController状态机

如何轻松地在不同的视图之间切换 作为移动开发人员,我们非常普遍,必须实现某种内容视图(通常是列表),以显示必须从后端服务中获取的数据。 此外,通常还必须对某些错误或空视图的结果做出反应。 有了这个要求,在iOS开发之初,开发人员就习惯了与此非常类似的设置: 一个UIViewController + UITableView来显示内容列表,并在等待时带有一个UIActivityIndicator 。 表示错误状态的UIView 。 另一个UIView表示空状态。 取得成功后,除了隐藏加载指示符之外,我们什么也不做。 但是,如果提取操作因错误而结束或返回空数据集,则我们将必须: 隐藏UITableView 。 创建要显示的错误或空白视图的实例,通常将列表视图控制器设置为其委托。 将子视图添加到列表视图层次结构中。 尽管这种方法没有错,但是就可伸缩性和维护而言,它并不是理想的处理方式: 我们必须保持特定的逻辑,以确定何时显示或隐藏每个视图。 如果有代表团要做,这也迫使我们将内容视图与其他视图结合起来。 当添加新状态时,通常需要使用臭味的switch语句,这需要大量的工作。 由于同时存在多个视图,因此具有更高的内存占用量。 幸运的是,iOS 5.0附带了一个新的API,可以将视图控制器作为其他视图控制器的子代来管理视图控制器,这使得我们可以做自己的容器视图控制器(例如本机UINavigationController , UITabBarController等)并以更好的方式重用组件在视图生命周期方面,允许使用UIViewController实例组成复杂的视图。 在本文中,我将展示一种非常简单的方法来说明如何使用子级视图控制器对视图状态进行建模。

Twitter最佳iOS技巧:11月版

开发社区在11月非常活跃,因此我为您找到了许多出色的iOS Twitter技巧。 准备探索Xcode 9的最新功能(暂时忘掉一些错误!),有关单元测试的许多技巧(您已承诺明年开始编写),方便的LLDB详细信息和一些有趣的时刻! 上个月开始享受280个符号的宝石。 Twitter技巧#1 这个方便的解释表将描述Pointer名称后面隐藏的所有“内脏”: Twitter技巧2 使用Core Data / Realm和多个线程时要遵循的“黄金法则”。 这样,数据库维护就不会随着时间的流逝而成为噩梦。 Twitter技巧#3 一个可变阴影的好用例! 您可以使用它来确保引用的是参数值的本地可变副本,而不是原始参数。 Twitter技巧#4 每个旅程都从一个步骤开始。 如果遵循以下3条简单的规则,即使是单元测试的旅程也是可以实现的: Twitter技巧5 在约翰·桑德尔(John Sundell)启发我们之后,您已经开始进行单元测试,对吗? 多亏了Arek,现在您知道⌃⌥⌘U快捷键的行为可能因光标位置而异: Twitter技巧#6 Xcode的能量影响分析器非常强大。 您甚至可以根据OLED功率模式估算对iPhone X的能量影响。 不是纯技巧,而是要知道! Twitter提示#7 最新的Xcode 9进行了不错的改进。现在,您可以在Objective-C项目中使用`@ available`关键字在运行时检查系统版本: Twitter技巧#8 最新的Xcode的另一个绝佳提示。 这是通过删除单个文件来提高UI性能的方法。 Twitter提示#9 使用自动版式时,停止更新动画的约束。 有一个更好的方法: Twitter技巧#10 您是否曾经想过将指纹用作Macbook Pro上的sudo密码? 现在,通过这一行代码,您可以做到这一点。 Twitter技巧#11 字典的alt下标处于最佳状态。 第一个版本更干净,也更快。 Twitter技巧#12 充分利用LLDB的e ( e表示expression )命令的全部潜能,并始终停止使用po命令。 这将大大改善您的调试体验。 Twitter提示#13 LLDB表达式很难处理吗? 使用此命令,您可以查看日志输出并找出问题所在。 Twitter提示#14 […]

我的代码年— If(2017 isEnding){reflectAndSetNewGoals()};

在2017年结束时,我会反思自己的建设,参加的课程,所学的知识,所教的知识以及我想要在2018年做的事情。 一月 发布了我的第一个应用程序UPK,该应用程序使用NYC Open Data来展示公共普及幼儿园前学校。 组织了iOS上的女性代写女性聚会活动。 二月 发布了贴纸包,涂料贴纸包。 参加了纽约市首席开发人员会议的奖学金。 游行 参加了伦敦的iOSCon奖学金。 发布了我的第二个应用程序theGrindTimer,这是Pomodoro计时器的一个版本,旨在提高生产率。 为9年级和10年级的学生开设了为期两周的前端开发课程。 四月 发布了第二个贴纸包,Sakink。 可以 参加奖学金在新奥尔良举行的碰撞会议。 六月 在Henry M Ly的建议下,开始阅读iOS Big Nerd Ranch的一些书籍。 七月 开始记录/记录我解决的日常白板问题。 开始与Jhantelle Belleza一起开发多维数据集应用。 八月 使用Bootstrap和雨水玉米饼更新了我的网站。 九月 从事日常CodeFights。 十月 审查了面向对象的编程和软件开发基础知识。 十一月 学习过C#。 熟悉Visual Studio IDE。 了解了如何编写(和喜欢)单元测试。 十二月 发布了我的第三个应用程序,“我看见我说”,一个幼儿园见识单词闪存卡应用程序。 扩展我的Apple Watch应用程序之一。 创建Amazon Alexa技能。 让自己变得更加轻松-并非每个人都学到同样的方法。 制作我讨论过的防man人的应用程序,并确保对其进行测试。 找出RxSwift。 使用React Native构建一个移动应用,并将其发送到Google Play商店。 你的目标是什么? 你完成了什么?