Tag: 编码

Swift解决方案:网桥

我想请您注意抽象汉堡包及其作为餐食的具体实现。 假设我们要添加一个新汉堡,您需要创建多少个其他类? 如果回答三个,那将是正确的: 两个层次 这是不直观的,但是避免这种混乱的解决方案是创建两个单独的层次结构。 这是定义在声明时的含义: 桥接模式将抽象与其实现分离开来…… “抽象”是指基类或协议。 在我们的示例中,它涉及各种汉堡类。 这些汉堡包不会被实例化,因为餐厅不会单独出售它们。 必须使用实现将它们分类为一顿完整的饭菜才能使用。 “实施”是指我们在将汉堡包加入餐边后制作的餐食类。 因此,我们将汉堡包(抽象)与餐食/面食(实现)分离,并剩下两个类层次结构。 层次结构之间的桥梁 然后定义继续说: 桥接模式将抽象与其实现分离, 以便两者可以独立变化。 现在我们有了两个单独的层次结构,我们需要一种连接两者的方法。 为此,我们为每个Burger赋予Side类型的属性。 这种“具有”关系是连接两个层次结构的“桥梁”。 我们这样做是为了使两者可以独立变化。 换句话说,我们不再需要为汉堡和面包的每个组合创建一个类。 由于它们的层次结构是分开的,因此每个新汉堡或一面只需要一个新类。 这一切似乎有点抽象,所以让我们回到代码中进行演示。 编码解决方案 我们需要针对设备和音频类型的单独层次结构。 让我们从音频类型开始: protocol AudioHandling { func handle(audio: Audio) -> Audio } class AudioEncryptor: AudioHandling { func handle(audio: Audio) -> Audio { // Encrypt and return Audio } } class PlainAudioHandler: […]

学习Swift和iOS开发第1部分:安装Xcode。

学习Swift和iOS开发第1部分:安装Xcode。 像任何优秀的工匠一样,我们需要交易的工具。 对于iOS开发人员(或macOS,tvOS,watchOS),该工具是Xcode。 画布对艺术家来说就像Xcode对iOS开发者一样。 它充当了我们的工作空间,富有创意的出路,沮丧的源头等等。 这将是一篇非常简短的文章,因为使用Xcode进行启动和运行实际上非常容易! Xcode是一个了不起的应用程序。 它是一套完整的工具和应用程序套件,使开发人员能够通过应用程序创造未来。 正如您将看到的,安装和入门非常简单。 首先,打开macOS App Store,然后在右上角的搜索栏中键入Xcode ,然后按Enter进行搜索。 结果加载后,Xcode将是第一个结果。 接下来,单击GET(因为我已经安装了它,所以我说它处于打开状态),然后输入您的Apple ID信息以开始下载。 请记住,这是一个庞大的应用程序(4.5 GB),安装后将占用近12 GB。 要打开Xcode,您所需要做的就是进入Applications文件夹,然后单击Xco​​de。 就是这么简单。 Xcode打开后,将显示“欢迎使用Xcode”屏幕,其中提供了多个选项供您选择。 这将是本书所有项目的启动板。 您将打开Xcode并从此处创建项目。 了解Xcode界面后,您将看到它在应用程序开发过程中的功能和帮助。 这篇文章简短而且有充分的理由-Apple通过提供如此精简的体验使我们的工作变得如此轻松。 如今,开始开发iOS的障碍非常少,我们只需单击几下就可以开始。 这意味着我们有更多时间专注于制作出色的应用程序。 在下一篇文章中,我们将简要介绍一些Swift基础知识,以供您品尝。

为什么我停止使用情节提要和Interface Builder

在开始点燃手电筒之前:是的,我以前曾经广泛使用过Interface Builder。 实际上,直到几个月前,如果没有我心爱的情节提要,我无法想象创建一个项目。 我研究了一些代码约束,而仅语法本身就使我不寒而栗。 因此,当您在Samsao的第一天得知我的指南明确禁止使用Interface Builder时,您可以想象到我的惊讶。 当我的同事开始解释这是为什么时,我所能想到的就是:但是使用IB变得如此简单! 然而,放开情节提要几周后,我无法想象自己会再使用一次。 现在,如果您是IB的狂热分子,您可能会将我钉为极端主义者,而无视此刻我所说的一切,那很好。 但是,如果您可能想知道是否有办法让您每天花30分钟等待重载的故事板文件打开,那么这篇文章适合您! 因此,不要浪费您的宝贵时间,让我们开始吧! 他们很慢 如果您有足够的耐心并且喜欢在等待IB文件打开时进行呼吸练习,那么对您来说非常好! 就个人而言,每次我尝试打开一个故事板时,我要做的就是把头撞在墙上。 我知道,我的耐心正在发展中。 在团队合作中与他们共事 如果您是自由职业者/独立开发人员或将来的开发人员,那么这可能还没有影响到您,但是如果您曾经不得不处理NIB文件上的合并冲突,那么您会感觉很糟糕。 使用UI代码,轻而易举! 它们使代码的可重用性复杂化 在代码中,如果有5个看起来几乎相同的屏幕,那么使用协议在它们之间高效地重用UI代码非常容易。 使用情节提要,祝您好运,找出如何分享观点和行动! 他们会变得很乱 一个图像说出一千个单词。 这到底是怎么回事? SnapKit 使编写代码约束变得如此轻松! 好的,您已经阅读了有关Visual Format Language的一两本书,这让您有些哭泣…… customView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat:“ V:| -20- [customView(> = 70 @ 500)]-[customView(== customView)]-30- [customView]-|”) 但是,如果您了解SnapKit及其简单性,您真的没有任何借口! customView.snp.makeConstraints {(make)in make.top.equalToSuperview() make.centerX.equalToSuperview() make.width.equalTo(70) make.height.lessThanOrEqualTo(200) } UI代码没有比这更好的了! 总结一下 是的,对于初学者来说,情节提要更容易进入,对于快速制作原型非常有用。 但是,如果您从事的是大型专业项目,那么我实在找不到一个很好的理由来说明为什么有人会喜欢使用它们而不是用代码编写UI。 如果您对如何使用SnapKit设置没有情节提要的项目感到好奇,请查看有关此内容的新博客文章! 现在,我知道那里的大多数IB / storyboard狂热者仍然认为我很疯狂,如果您是其中的一员,我很想得到您的意见,请给我评论! […]

学习Swift和iOS开发:一系列。 – devslopes

学习Swift和iOS开发:一系列。 欢迎来到编程和iOS开发的世界。 欢迎来到充满创造力,激情和想象力的神奇世界。 在这里,我们将代码转化为可以使人们愉悦,娱乐和改变人们生活的体验。 首先先说一点。 学习编码可能很困难。 这也是我做过的最有意义的事情之一 。 我自学了30岁的代码,所以无论您是大人还是小孩子,您都可以学习编码。 您有时会灰心。 您将告诉自己:“我对此没有头脑”,您将要放弃。 您可能会遇到欺负网络编码人员的恶棍,这些人贬低了您的编码技能,并告诉您,除非拥有计算机科学学位,否则您不是真正的程序员。 但是然后事情就会开始点击。 您将编写一些代码,并且该代码将起作用,并且您自己会想到:“伙计,我很棒。” 我想给您一些建议,以使您在遇到挫折时保持直截了当: 1.不要将自己与其他程序员相比。 与自己竞争。 有人永远比你更熟练。 2.您确实属于编程世界。 不管别人怎么说。 作为程序员,您拥有独特的才能,而其他程序员则没有。 3.如果学习很痛苦并且大脑受伤了,那就知道自己正在成长。 程序员可以过着有意义的生活。 我的编程生涯是在家中度过的。 这意味着与我的家人在一起,这是我的首要任务。 成为一名优秀的程序员,您将有机会过上任何想要的生活方式。 这是一种拥有更多个人时间和自由的生活方式,还是那意味着为顶尖公司工作而赚到丰厚的薪水-或者也许两者都有! 在您学习编码的过程中,我能告诉您的最后一件也是最重要的事情是—每天学习,每天做一些动手编码。 您的知识将会复合,您的进步将成倍增长。 那么,我们将在本系列中介绍什么? 很多。 以下是即将发生的事情: 了解Swift的基础知识。 涵盖变量,函数,数组,循环,字典以及所有这些好东西。 我们将介绍UIStackViews并构建您的第一个iOS应用。 了解有关地图,自动版式和手势识别器的信息。 了解应用程序设计,Sketch基础知识以及UX和UI到底是什么? 我们将学习如何与API交互,使用Firebase以及一些单元测试。 还有更多。 因此,如果您准备好开始,那么我们就开始阅读有关安装Xcode的第一篇文章。 准备。 组。 走。

学习Swift和iOS开发第2部分:Swift简介

在上一篇文章中,我们学习了如何安装Xcode。 在本文中,我们将使用Xcode深入介绍Swift的一些基础知识。 Swift是使用现代方法构建的通用编程语言,用于安全性,性能和软件设计模式。 如果您不具有计算机科学或编程背景,那么您可能会想:“那太好了。 但是这是什么意思? Trust”当我们说这意味着您的编码学习生活比以前容易得多时,请相信我们。 Swift是一种非常优秀的第一门编程语言,因为它的语法通常很容易理解。 在线上还有大量资源(例如教程(如本教程!),YouTube视频,博客,论坛等)可以帮助您学习Swift。 本章是后续各章的前提。 它主要供您参考和参考。 稍后我们将详细介绍。 让我们开始吧! 启动Xcode,我们将在一个称为Playground的地方工作。 只需打开Xcode并选择“游乐场入门”。 然后选择空白。 或从“文件”>“新建”>“游乐场” 命名并保存您的Playground,然后您应该会看到以下内容: 那么,这是什么游乐场? 游乐场是一个互动的工作环境。 我们可以编写代码,并立即查看我们的代码结果。 这使其成为学习和实验的好工具。 您可以在本文其余部分中看到的代码可以添加到您的Playground中以进行后续操作! 变数 每种编程语言都使用变量。 它们就像一个容器,可让您存储许多不同类型的数据。 要声明变量,必须使用关键字var : var讯息:String =“ Hello,World!” 我们刚刚写的内容告诉我们的计算机,我们想要创建一个容器(变量),其名称message为String类型,其中包含文本“ Hello,World!”。 Swift的惊人之处在于它包含了一个名为Type Inference的功能。 这意味着Swift可以分析变量内的数据(文本,数字,真/假等)并推断其类型。 要对此进行测试,只需在声明变量message之后删除String即可: var message =“你好,世界!” //类型推断的字符串 正如您在上面看到的,我们从未明确告诉我们的计算机我们希望variable为String但是由于Hello, World!周围的引号Hello, World! ,Swift可以推断出它的类型。 变量之所以称为变量,是因为它们是可变的,可以更改其值。 例如,如果我们想更改message变量的值,则需要编写变量名并按如下方式更改其值: var message =“你好,世界!” message =“你好,斯威夫特!” 现在message等于“你好,斯威夫特!”。 常数 有时,有些价值是您永远都不想改变的。 例如您的生日或您的家乡的名称。 […]

在Swift 4中解析JSON:基础知识

Swift标准库定义了一种用于数据编码和解码的标准化方法。 您通过在自定义类型上实现可Encodable和可Decodable协议来采用这种方法。 采用这些协议可以使Encoder和Decoder协议的实现获取您的数据,并在外部表示形式(例如JSON或属性列表)中对数据进行编码或解码。 为了同时支持编码和解码,请声明对Codable符合Codable ,后者将Encodable和Decodable协议结合在一起。 此过程称为使您的类型可编码 。 编码和解码自定义类型 如何在Swift 4中解析JSON? 让我们直接说清楚。 这是一个User的JSON示例: 为了将JSON转换为User实例,我们将struct标记为Codable 。 它应该看起来像这样: 然后,我们创建一个解码器: 还有BOOM! 这就对了!! 重要说明:我们使用了try! 并强行解包,但这只是出于示例的目的,您不应以这种方式使用它。 您应该使用catch来正确处理错误。 做一个好的开发者。 自定义键名 如果您的API采用蛇形惯例,则只需对CodingKeys枚举进行自定义实现。 该枚举定义了如何将属性连接到JSON字段名称。 因此,我们的User模型应如下所示: 来源和阅读链接 编码和解码自定义类型 将JSON与自定义类型一起使用

所以您想成为一名iOS开发人员?

作为几个月前开始走这条路的人,让我与您分享我对Udemy和iOS Development的了解。 我将从我所做的开始。 当我第一次想到这可能是我想要追求的目标时,我在网上搜索了一些必修课。 我参加了许多课程的在线课程,包括艺术,音乐,博客,您可能会说,我可能已经修过一门课程。 我喜欢学习,这就是为什么成为一名开发人员适合我的原因。 当我这样做时,我遇到了很多站点,从成本至少为1k的新兵训练营,到每月大约150的课程。 这些东西都没有让我感兴趣,因为我的现金太少了,不愿意把那种钱投资到我不确定自己会擅长的东西上。 然后我遇到了乌迪米。 当我找到该站点时,它似乎太好了以至于无法实现。 有这么多不同的iOS开发课程,所有课程都带有“从完整的初学者到专业人士”之类的标题,以及诸如“如何在没有经验的情况下找到您的第一份工作”之类的瑰宝。 使情况变得更好的是,即使这些班级的最高价为200美元,他们目前的80%售价仅为20美元! 现在,已经使用Udemy几个月的任何人都知道他们所有的课程都在永久销售中,以至于20美元的销售几乎是一笔小数目,因为他们的价格通常在15美元以下。 现在我考虑了一下,在所有这些月之后,我认为我从未见过它们不出售! 这使我明白了重点。 目前,他们正在进行黑色星期五促销活动,所有课程的促销价均为9.99。 我将就我参加的课程提供一些建议,并认为这是您最好的选择。 我参加了许多课程,您可能永远也不会陷入iOS课堂的最底层,但是话虽如此,有些课程却比其他的要好。 如果您不接受我的建议而想自己退房,请记住这些事情。 如果他们买不起麦克风,他们可能会买不起,并且从来没有因为成为开发者而赚钱,您将希望将它们传承下去。 如果他们不能设计看起来像20年前的幻灯片,那么您会想通过的,因为他们永远不会教您如何设计漂亮的UI。 如果您观看了介绍,但他们还没有完全将您要学的东西卖给您,那么您会想通过的,因为他们已经证明他们不能完全切入主题。 您会注意到,有些话题没有涉及50小时的庞大课程。 很好,任何课程都不可能触及所有内容。 而且,当您考虑以9.99的价格获得这些课程时,您必须意识到所获得的服务远远超出了您所需要的价格。 话虽这么说,为了填补这些空白,您可能需要处理一些生产不足的课程。 例如,大多数不错的50小时课程都是关于网络的,但是几乎没有人谈论实现Facebook或twittersdks之类的事情。 但这是另一个话题。 这是为那些正在寻找头等舱的人而设计的! 最好的部分是,所有课程都提供30天退款保证。 因此,如果您不确定要尝试开发,那么这是最佳时间。 您花了10美元,买了一个课程并将其浸泡30天。 如果发现这不是您的事,则可以要求退款,这非常简单。 您可以转到课程概述,单击选项下拉菜单,然后要求退款。 您无需与实际的人进行互动,因此,如果焦虑对您来说是个问题,不用担心,您不必向任何人解释要退款的理由! 我已经参加了一些课程,并且正在学习之中。 第一个,远远领先于其余的,是Angela Yu和The London App Brewery的作品。 安吉拉以清晰简洁的方式向我解释了我参加过的其他Udemy课程中没有的乐趣。 她非常透彻,解释了过程,常见错误,最重要的是,她很有趣! 我从没想到会从编码课程中学到的东西是幽默,并没有减损实际的学习。 在课程即将结束时,她拥有一些模块,这些模块涉及如何实际上传到App Store,以及有关设计UI的整个部分,我认为这是最完美的选择。 如果那还不够的话,她在末尾会有一个问答部分,在那里回答来自学生的有关进入该​​行业的问题,以及有关自己的一些随机问题。 如果我只需要从Udemy中选一门课,那将是毫无疑问的一堂课。 俞安琪的课程 接下来是Ray Wenderlich的课程。 这门课程提供了许多免费的额外赠品和下载,几乎感觉就像是在偷东西。 奖励课程,一本电子书,我相信它的售价为15美元,但是如果您参加了该课程,它是免费的。 还有大量资产可用于开发自己的免版税的应用程序。 本课程中有多位教员,根据您的学习方式,这可能是好事也可能是坏事。 […]

带有Encoder和Encodable的JSON

Swift 4带来了一种更加原生的方式来编码和解码实例,并内置了对每个人最喜欢的基于文本的格式的支持:JSON! 我们不使用所有的编码和解码源代码,而是采用一种不同的方法,并逐步通过一个简单的示例:单个Int实例如何通过JSONEncoder变成JSON数据? 从那里,我们应该能够更进一步,了解其他原始类型,数组,字典等是如何编码的。 封存 NSCoding作为Cocoa的一部分已经存储和检索数据很长时间了。 令人振奋的消息是,由于NSKeyedArchiver已有15年的历史了,Apple终于宣布弃用NSArchiver 。 😜 一个好主意是,如果可以对诸如字符串和数字之类的单个实例进行编码和解码 ,则可以存档和取消存档整个对象图。 编码所有事物 在Swift标准库中,除了编码 器之外,还有一些可编码的东西。 可编码是一种协议。 符合类型可以将自身编码为其他表示形式。 编码器也是一种协议。 编码器负责将可Encodable内容转换为其他格式,例如JSON或XML。 Encodable类似于NSCoding但作为Swift协议,您的Swift结构和枚举也可以加入聚会。 类似地,尽管Encoder还是协议而不是抽象类,但它与NSCoder对应。 一个简单的整数 您不能使用JSONEncoder编码裸标量,而是需要顶级数组或字典。 为简单起见,让我们从编码包含单个整数[42]的数组开始。 let encoder = JSONEncoder() let jsonData = try! encoder.encode([42]) 首先,我们实例化JSONEncoder ,然后使用数组在其上调用encode() 。 那里发生了什么事? // JSONEncoder.swift open func encode(_ value: T) throws -> Data { let encoder = _JSONEncoder(options: self.options) encode()方法采用一些Encodable值,并返回原始JSON Data 。 […]

在Swift中通过Date属性轻松地对对象进行分组

我最近创建了一些按月划分的表视图。 这就是我按照对象的date属性对它们进行分组的方式。 我们将使用Doctor Who剧集演示该功能。 这是一种按日期对事件进行分组的方法: 我们使用reduce(into:)将我们的情节数组转换为以日期为键的情节字典。 在此示例中,当月播放的剧集将被分组在一起。 对于每个情节,我们从播出日期的年和月部分创建日期。 我们将当前情节追加到现有数组或空数组中,并将其设置为该日期键处的字典值。 不好意思的解释是抱歉,这篇文章更多地是关于算法的发展,而不是算法的细节。 😅 我们可以将此代码提取到一个函数中: 现在将这些情节归类如下: 让分组= groupedEpisodesByMonth(episodes) 我们可以采取几个步骤,使该方法可用于带有日期的任何模型对象。 首先,我们将创建一个带Dated协议。 然后,我们的函数将接受实现我们协议的任何内容,而不是接受Episode 。 基本上,我们只是将Episode类型替换为Dated 。 现在,我们的呼叫站点如下所示: 让分组= groupedByMonth(episodes) 差别不大,但现在我们可以使用date属性对任何内容进行分组。 我采取了一些额外的步骤来使它看起来更“快捷”。我没有将其保留为函数,而是在Array上创建了扩展名,并参数化了将要分组的日期组件(因此您可以按天分组,或年份等)。 让分组=情节.groupedBy([。year,.month]) 通过用常见情况的枚举来表示日期部分,我们可以使使用起来更加容易。 让分组=情节.groupedBy(.month) 但是我认为我所拥有的足以满足我的需求。 ☺️ 将我们的数据按这种方式分组后,将其以表格视图的形式呈现相对来说比较简单,但是我会再保留一天。 谢谢阅读。 🤲

使用Xcode构建您的第一个应用程序

确保您的选项未选中,并且语言为Swift。 导航Xcode 我们将工作的四个主要部分是导航器,编辑器,调试区域和实用程序区域。 如您所见,我们的项目文件位于导航区域中。 我们应用程序的界面按钮将在Storyboard.swift进行设计。 文件和我们的Swift代码将保存在ViewController.swift 。 Xcode已经为我们提供了View Controller项目文件以开始使用。 现在,不必担心AppDelegate.swift或其他文件。 创建UI设计 尽管您可以通过编程方式对界面进行编码,但我认为在情节提要中进行工作是一种更直观,更有趣的方式来了解正在发生的事情。 因此,我们将在Xcode的故事板(用于存储用户界面)中使用情节提要。 仍在导航区域中的HelloWorldApp文件夹下,单击Storyboard.swift 。 添加对象元素 继续并单击对象库,如下图所示,或(Shift + Command + L)。 继续,在画布上添加一个“ 按钮 ”和一个“ 标签 ”。 从上面的对象库中放置并拖拽Button和Label对象。 使用右面板顶部的“ 显示属性”检查器图标,将按钮的文本,大小和字体更改为“显示问候”,添加背景色,并将标签重命名为“ Hello World”。 添加约束 我们需要添加约束,以使其在旋转设备或在不同屏幕尺寸上使用时保持在原位。 选择元素后,您将要单击下面的图标以添加约束。 将UI元素连接到代码 现在,我们已经完成了UI,现在让我们编写代码以建立与UI的连接。 要并排查看两个文件,请单击助手编辑器以在项目导航器中打开ViewController.swift文件。 现在,我们需要在“显示问候”按钮与View Controller.swift文件之间建立连接。 在Storyboard.swift文件中,单击“ Hello World!”标签。 在单击键盘上的CTRL按钮的同时,单击并将标签拖动到ViewController.swift文件。 确保标签是连接插座,并标记为“ helloWorld”。 使用“显示问候语”按钮执行相同的操作,除了确保将连接更改为“动作”。 它看起来像这样: 完成代码 测试该应用程序之前的最后一步是将以下代码放入您刚刚添加的toggleGreeting(_ sender: Any)方法中,该方法在未被使用时将隐藏“ Hello World!”问候: helloLabel.isHidden = […]