Tag: iOS应用开发

在Swift中编写网络层:面向协议的方法

在本指南中,我们将研究如何在没有任何第三方库的情况下在纯Swift中实现网络层。 让我们直接跳到它! 阅读指南后,我们的代码应为: 面向协议 易于使用 易于实施 输入安全 使用枚举来配置端点。 以下是我们最终将通过网络层实现的示例: 只需输入router.request(。 借助枚举的力量,我们可以看到所有可用的端点以及该请求所需的参数。 首先,一些结构 当创建任何东西时,拥有结构总是很重要的,因此以后找东西很容易。 我坚信文件夹结构是软件体系结构的关键因素。 为了使文件井井有条,让我们事先创建所有组,然后记下每个文件的存放位置。 这是项目结构的概述。 ( 请注意,名称仅是建议,您可以根据自己的喜好命名课程和组。 ) EndPointType协议 我们需要的第一件事是定义我们的EndPointType协议。 该协议将包含配置端点的所有信息。 什么是端点? 好吧,从本质上讲,它是一个URLRequest及其所有组成部分,例如标头,查询参数和主体参数。 EndPointType协议是我们网络层实现的基石。 继续,创建一个文件并将其命名为EndPointType 。 将此文件放在“ 服务”组中。 (不是EndPoint组,我们将继续进行说明)。 HTTP协议 我们的EndPointType具有构建整个端点所需的许多HTTP协议。 让我们探究这些协议的含义。 HTTP方法 创建一个名为HTTPMethod的文件,然后 将其放在“ 服务”组中。 该枚举将用于设置请求的HTTP方法。 HTTP任务 创建一个名为HTTPTask的文件,然后 将其放入“ 服务”组中。 HTTPTask负责为特定端点配置参数。 您可以添加适用于您的网络层要求的任意多个案例。 我将提出请求,所以我只有三种情况。 下一节将讨论参数以及如何处理编码参数。 HTTP头 HTTPHeaders仅仅是字典的别名。 您可以在HTTPTask文件的顶部创建此类型别名 。 公共typealias HTTPHeaders = [String:String] 参数和编码 […]

iOS。 具有Swift泛型的通用单元

首先,我们必须承认在设计上不可能使用UITableViewCell而不是UICollectionViewCell,反之亦然。 因此,最好创建一些可以代替这两个类使用的东西。 UIView是一个很好的起点,因为它是UIKit中最通用的UI组件。 屏幕上显示的所有内容都可以使用它来创建。 我们可以将其放在表或集合单元中,作为其他所有内容的容器。 让我们从这个简单的想法开始。 第一次尝试 您可以看到其中具有任何视图的集合单元。 在这里以及我们进一步假设,很容易为表单元格创建相同的版本,并且省略了这种实现而不重复代码并减少读取时间的实现。 尽管单元格变得更加通用,但是这种方法给我们带来了一些缺点: 我们失去了标准单元的重用,需要自己创建视图池。 这意味着使用UIKit库进行代码复制; 使用xib更加困难,因为我们需要将所有内容都嵌入到视图中。 有一个恒定的视图类型,因此我们每次使用视图时都需要强制转换类型。 视图的框架严格限制为与单元格内容相同。 我们将使用Swift Generics对其进行进一步修复。 第二次尝试 作为第二种方法,我们对之前的代码进行了一些更改: 首先,如果我们要使用系统的重用,则单元格内部的视图不应更改。 这意味着我们将该属性标记为常量,并在单元初始化期间创建一个视图。 其次,让我们使用Swift Generics到处都知道视图类型。 现在看起来好多了。 但是我们仍然需要讨论有关从xib加载的大问题。 您通常需要一个xib名称,有时还需要一个束名称(对于框架而言)才能从xib加载某些内容。 如果xib与视图的类存储在同一束中,则xib名称足以加载视图,因为可以使用Bundle(for:Class)方法从该类接收束名称。 这是需要提供名称的协议LoadableFromXib ; 以及从xib文件加载视图的load方法的实现。 现在,在单元初始化期间从xib加载任何视图要容易得多。 看一下LoadableFromXibContentCollectionCell类中的视图初始化: 因此,现在我们可以使用任何视图创建集合(和表)单元,或者使用初始化程序创建它或从xib加载它。 系统对这些单元的重用( 任何视图)都是免费的。 最后,为了使解决方案更通用,让我们在视图中添加插图,因为单元已负责视图的定位和大小调整。 注意,在单元重用期间必须将内容插图恢复为零。 当然,可以向通用单元格添加更多属性,但是看起来contentInsets属性就足够了,因为通用单元格只负责在其内部定位视图。 总而言之,我们创建了具有以下功能的通用单元: 任何视图都可以轻松地转换为表单元格或集合单元,无论它是从xib加载还是以编程方式创建。 例如: SimpleContentCollectionCell -是包含标签的集合单元。 视图填充或边距不会发生变化,因为可以使用像这样的单元格的contentInsets参数来固定它们: cell.contentInsets.left = 20-从左侧增加20个点的插图。 在单元格上设置一些值时,我们确实知道该单元格的视图类型: cell.view.text =“单元格文本” 我已经发布了这篇文章,以分享一些Swift代码中的有用方法。 希望这会有所帮助。 此外,我们非常欢迎您评论和讨论该方法,并在您的项目中使用它。 另外,请随时下载游乐场以显示桌子高亮状态等:Universal Cells游乐场。 […]

如何为UISearchBar图标设置自定义图像

UISearchBar带有一些图标(UISearchBar.Icon:https://developer.apple.com/documentation/uikit/uisearchbar/icon),例如resultsList和书签: 有时您需要从UISearchController的UISearchBar中为UIBarIcons设置不同的图像或图标,例如,当用户点击以下按钮之一时,我需要显示一些过滤器,例如https://www.linkedin.com移动应用程序: 创建UISearchController 设定: 您需要实现协议UISearchBarDelegate才能知道何时点击按钮。 UISearchResultsUpdating和UISearchControllerDelegate以便出现和使按钮绝望: 最终视图如下所示:

7种学习iOS开发的资源

应用程序开发已成为许多开发人员的丰厚领域。 即使市场上已有许多应用程序,对应用程序的需求仍然很大。 随着技术的发展,部署到市场的应用程序的复杂性也在增加。 人们仍在寻找可简化日常工作,使生活更轻松的应用,包括生活方式,健康和生产力应用。 自从Apple开设App Store大门以来,世界各地的开发人员都可以为iPhone和iPad创建应用程序,正在设计iOS和Swift应用程序应用程序的开发人员数量大大增加了,许多开发人员都从这个有利可图的提议中获利。 iOS开发不是最容易学习的任务,但是您可以使用一些令人惊叹的在线资源来入门。 这些资源是您作为iOS开发人员开始您的旅程,甚至提升您的开发技能的绝佳方式。 这里有7个很棒的资源,可以帮助您开始学习iOS编程和开发。 开始开发iOS应用 Apple的参考资料库将帮助您立即为Apple开发应用程序,并为您提供最新的正确指南。 但是,该参考文献确实假定您已熟悉Swift编程语言。 如果您还不熟悉编程语言,可以查看Swift Playground,这将帮助您掌握Swift编程范例 2. 学习iOS编程构建高级项目 如果您想一开始就完成所有工作,那么这是一门很棒的iOS App课程。 如果您不熟练使用Swift,请不要担心-在此课程中,您将不需要它。 此iOS编程课程从一开始就开始,还涉及Swift语法,以帮助您学习甚至提高您的语言技能。 从那里您将学习UI,还将学习如何开始在Sketch中设计多个应用程序,以及如何将草图转换为可用的应用程序。 有5种不同的应用程序是课程列表之一,因此您将在构建应用程序时获得大量练习。 3. 开发适用于iPhone和iPad的iOS 7应用 此免费的iOS课程由Standford的工程学院提供,可在iTunes上下载。 这门精妙的课程将帮助您学习有关在iOS 7中为iPhone和iPad创建应用程序所需的一切知识。除了视频外,还可以按自己的进度观看讲座幻灯片以及视频。 4. iOS开发代码学习路径 如果您想在iOS开发中学习完整的速​​成课程,那么Code School的此iOS App教程是入门的绝佳方法。 它具有完整的设计路径,使您从学习Swift语法到使用Objective-C,甚至学习如何将Google Maps集成到iOS Apps。 但是,如果您要构建实际的应用程序,这可能会令人失望。 5. 成为iOS开发人员 如果您想从头开始学习iOS应用并构建应用,那么Udacity的Nanodegree可能是您的正确选择。 它包含一系列旨在帮助您入门学习iOS的课程,包括Swift入门iOS开发,UIKit基础知识,iOS网络,iOS持久性和核心数据等。如果您是认真的,最好的部分是这个行业的工作,那么这个学位也可以帮助您做到这一点。 6. 使用Objective-C开发iOS Treehouse是另一种从头到尾的曲目,它设计了一个Tracks系统,使您可以从一个部分前进到另一部分,并在进行过程中添加更多视频和讲座。 带有Objective-C的iOS开发教程包括诸如Objective-C基础知识,面向对象的Objective-C,使用Objective-C构建简单的iPhone App之类的课程。 您可以按照自己的步调缓慢进行,花一些时间来熟悉语言和用户界面。 7. 学习iOS编程 AppCoda设计了完整的电子书来帮助您学习Swift3。但是,此资源名列前茅,因为它具有资源列表,可以帮助您使用Swift Books和Free iOS App Tutorials学习Swift和iOS编程。 这些部分分为初学者,中级,iOS编程101,Swift,Apple […]

Justa发生的团队

我记得在前两个“移动新闻”应用设计课程中,我们感到多么尴尬和威吓。 我们不认识任何人,尤其是彼此。 这也没有帮助我们一个人都不知道我们想要创建什么样的应用程序。 因此,当我们被告知“快速约会”时,我们自然地呆在一边,与最亲近的人交谈。 甚至不说话,主要是听。 我们在某个时候简短地互相交谈,但只是闲聊。 是时候组建团队了,我们又发现了对方, 只是 发生了一些事 。 我们最初的应用想法彼此之间有很大不同,但最终我们决定了一个我们认为自己实际上不会做的想法-Best By。 这个程序可以让人们知道他们的食物何时到期。 马上,我们注意到存在其他食品过期应用程序。 我们最大的挑战将是使我们的产品更好,更易于使用,同时找到食品的数据及其有效期信息。 我们在本周初见面,提出了Quatro团队(我们的创造力)游戏计划。 我们的会议包括集思广益的想法,但最重要的是,在Snapchat上彼此添加! 谁在Quatro团队中? 怎么了,我是Jahnavi。 我是世界上最好的大学的企业传讯和新闻学高级主任。 我在压力和拖延方面也有未成年人。 我参加本课程的原因是技术和创新使我兴奋,并且我希望成长为一名设计师和开发人员。 通常,您可以在Monkey’s Nest,Taco Joint或我的PJ中找到我,看到Bachelor! 您好,我是扎克。 我是UT的新闻学专业大四学生。 我上这堂课是因为我想对当今的应用程序和技术更加熟悉。 我希望有一天能以科学技术为重点,提出创新的报告,这些创新有可能为人类的科学技术进步做出改变游戏规则的贡献。 我对空间和整个宇宙中的可能性非常着迷。 我也非常非常喜欢自制甜茶。 我有时间读书时喜欢读书。 我喜欢西方人,幻想和科幻小说。 嗨,我是艾琳。 这是我在UT大学计算机科学专业的最后一个学期。 我参加本课程的原因是,我非常喜欢在其他一些计算机科学课程中制作应用程序,并且对本课程中增加的跨学科方面非常感兴趣。 我很高兴看到与新闻专业的学生合作将如何改变移动开发课程的过程和最终产品。 嗨,我是Abhinav。 我是UT的计算机科学专业三年级的学生,我正在上这堂课,以便可以在App Store中使用一个应用程序。 我之前涉足过制作iOS应用程序的工作,但您从未见过。 我很高兴能与新闻学专业的学生一起发布一款有用的应用程序,它将对您中的某些人有所帮助。 当我不在校园或在家中时,我可能会迷失在格林贝尔特(Greenbelt)的树林中,在街对面打网球或去西校区看一场表演。

Swift World:设计模式-外立面

从字面上看,立面意味着 建筑物的正面,尤其是可望向街道或开放空间的主要正面。 来自Facade — Google搜索 类似地,当设计模式立面定义到复杂子系统的更简单接口时。 例如,在我们的汽车制造厂,我们有不同的部门来生产不同的组件,例如引擎,车身和配件。 作为客户,我们不在乎每个部门如何完成自己的工作。 我们只是创建一个工厂实例并使它工作。 class Engine { func produceEngine () { print (“prodce engine”) } } class Body { func produceBody () { print (“prodce body”) } } class Accessories { func produceAccessories () { print (“prodce accessories”) } } 因此,我们构建了一个外观以提供一个简单的界面。 class FactoryFacade { let engine = Engine () let […]

使用JENKINS在iOS中进行持续集成

JENKINS是一个开源自动化服务器,可用于自动化各种任务,例如构建,测试和部署软件。 它允许持续集成。 持续集成是一种开发实践,要求开发人员定期将代码集成到共享存储库中。 Jenkins将安装在您的服务器或本地系统上。 有关安装和配置的详细信息如下: 安装和配置: 要进行Jenkins的基本设置,自动化iOS构建,触发构建失败和稳定性电子邮件,以获取可下载的ipa,请执行以下步骤: 步骤1:下载JENKINS 对于MAC。 步骤2:打开Jenkins。 输入详细信息(用户名和密码)。 步骤3:单击管理Jenkins→管理插件→搜索插件并安装→重新启动jenkins→交叉检查已安装的插件。 注意:为svn和Xcode集成安装Subversion插件,以提供与xcode相关的设置。 第4步:返回Jenkins主页。单击New Item,输入Job name,选择freestyle project。单击OK。现在创建了作业。 第5步:点击您的工作,点击配置。 步骤6:我们现在将进行项目级别的配置,其中包括以下步骤: 通常,给项目名称。 在“源代码管理”部分中,选择Git或Subversion(根据您的需要,我使用了svn)→给出存储库url→输入svn的凭据。 在“构建触发器”中,选择“轮询SCM”以给出我们希望詹金斯检查提交更改并触发构建的时间间隔(例如:给15分钟的时间,我们将使用H / 15 * * * *)。 在添加构建步骤中,选择XCODE→输入要为其创建构建的目标的名称。 在“配置”中,根据项目的需要提供调试或发布模式。 要创建.ipa,请在常规构建设置中点击设置,然后选择打包应用程序并构建.ipa? →给出.ipa文件名模式(这是您要赋予ipa的名称)。 再次单击Add Build Step→Execute shell→write命令来执行脚本。 注意:脚本文件(.sh)应该保存在我们的詹金斯($ {JENKINS_HOME} / workspace)工作区中。 在Post-build Actions中,选择Archive theartifacts以获取可下载的ipa。这些文件(内部版本)是可下载文件,可以从jenkins主页访问。 注意:为避免与供应配置文件和证书有关的错误: 将供应配置文件复制到Jenkins用户文件夹。 供应配置文件位于文件夹/ YourUserName / Library / MobileDevice / Provisioning Profiles中, 例如:在我的机器中,配置文件位于/ […]

如何搞定面试

场景 :面试候选人(高级iOS开发人员),以领导一个入门级开发人员团队。 问题 :您可能擅长于自己声称要做的事情,但是您需要保持重点,不要让面试官感到生死攸关! 《旅程:候选人》的使用Adobe Illustrator构建的简历令人印象深刻。 技能安排得当,乍一看,您可以肯定个人资料几乎完全适合这个职位。 几乎完美。 但是,事情从这里开始螺旋式下降: 1)候选人迟到 2)候选人再次参加,提到他想取消面试,但后来设法过来 3)候选人看起来没兴趣 4)候选人有一个先入为主的观念,即他不会被选中。 我想知道为什么,然后很快意识到了原因。 5)候选人不必等待面试官的提问,而只是开始不停地谈论所有事情。 面试官尚未准备好或不愿听到的事情。 6)候选人永远不会停止说话,面试官过一会儿要礼貌地打断。 7)因此,一旦面试官有机会询问简历中提到的问题,候选人将首先简要提及该主题,但很快就会徘徊到一些无关的领域,并且永远不会结束。 因此,这几乎使面试官有了一个想法,即应聘者长久而不深入地了解主题和相关事物,并且可能缺乏实施知识。 8)最后,面试官询问候选人是否有任何问题。 回答为“否”,并注明每个面试官都有不同类型的问题,这意味着候选人向面试官提问是没有道理的。 什么? 因此,总而言之,由于面试过程中缺少FOCUS而浪费了如此出色的技能和令人印象深刻的个人资料,这真是令人遗憾!

在Swift中使用二次曲线进行动画处理

在 Github 上可以找到该项目的完整代码 如果浏览移动UX / UI设计网站时发现了任何东西,那么流畅的动画就是设计师展示其才能的最喜欢的方式。 在完成了一些需要从After Effects文件转换动画曲线(定时和坐标值)的项目后,我可以体会这种转换带来的难度和断开连接的程度。 在最近的iOSoho Meetup上,谷歌的Adrian Secord(iOS UI框架技术负责人)讲述了为解决将 曲线 转换为代码这一问题的解决方案。 从他的讲话中 看来我对困难的理解是正确的! 尽管快速发展的设计标准已成为移动开发的标志,但似乎无法忍受流体动力学过时的那一天。 因此,我决定真正倾身并拥抱流畅的动画。 挥手? 还是杰洛? 也许至少是牛顿? 这是今天在星巴克玩贝塞尔曲线约两个小时的最终结果。 是否像您在iOS中遇到的一些流畅的交互一样酥脆和干净? 不,一点也没有。 但这无疑是一个很好的例子,说明了在iOS中添加动画曲线而无需吊舱很简单。 二次曲线 这很困难,但是当我刷二次曲线时,我能够阻止自己迷失在Wikipedia反馈循环中。 这是一个非常有趣的话题,有许多分支节点值得进一步探讨。 但就目前而言,足以知道向UIBezierPath添加二次曲线将使两个端点之间的线向第三点(称为控制点)弯曲。 一个有助于理解这些曲线的现实世界模拟方法包括在您的拇指和食指之间拉伸橡皮筋,然后用另一只手拉动拉伸的一侧。 您的食指和拇指充当线条的端点 ,而无用的手(拉动乐队)充当控制点 。 在您的脑海中,您仍然必须想象实际的曲线,但是当您将自由手( 控制点 )移动到拇指和食指( 端点 )之间的不同点时,应该能够更轻松地可视化该曲线的变化。 句法糖 为了使我的视觉神经平静,我在项目中添加了一些语法糖,以减少必须编写的CGRectGetXXX的数量。 我创建了RectFramer来包含每个CGPoint或CGFloat值的自动完成属性 我可能需要在给定的CGRect(UIView.bounds)上进行访问: 动画波峰 就iOS动画而言,wave的动画实现是相当标准的,因此我决定不做进一步介绍。 而是以下是负责动画的代码: 简洁的iOS动画代码 波浪“低谷” 将波动画完成到其周期的下一个部分,即波谷,与波峰几乎完全相同,而只是使用反转的控制点值。 有关此部分的更多详细信息,请查看该项目的Github。 结论 一旦我在纸上画出动画的不同阶段,就很容易将其转录为代码。 这就是在iOS中制作动画的秘密。 因为插值是“免费的”,所以您只需要知道动画需要命中的不同阶段。 如果您可以考虑然后绘制出这些不同的阶段,将它们链接在一起将变得更加容易管理。 >思想

Desmistificando通用链接

不能进行自然运动的Alémdeoferecer umaexperiência移动设备,istoé,sem的preprear abrir网站,conconúúdo的深层链接,tambémpodem serótimasferramentas de engajamento para seu aplicativo的深层链接。 Atravésdeles,使用Google的直接复制功能。 Alémdisso,解释性应用程序,trazendo maisinstalaçõespara o app。 通用链接 在iOS 9上,这是Apple的lancom深度链接chamada Universal Links。 URL解决方案的Eles vieram para替代品和解决方案的问题,例如: 链接 :HTTPS Para o seu网站的通用链接。 徽标,应用程序和应用程序定义了os链接; Flexíveis :Universal Links的功能和应用程序的安装,以及所有Safari嵌套的链接; Privacidade :Outras应用程序可用于comunicar或其他应用程序,可用于saber se elaestáinstalada ounão。 兰卡门大公国,维梅拉·坦贝姆·瓦里亚斯·杜维纳斯·索菲尔·芬奇纳门托和实施者。 在通用链接上没有应用程序,在大多数应用程序中都无法使用VivaReal,而在大多数解析器中都存在问题,请使用caminho。 ✌️ 实施通用链接 必不可少的2通用应用程序seu app com通用链接。 Criar o arquivo apple-app-site-association (关联文件)和fazer上载dele no seu网站HTTPS; Tratar o comportamento dos不会造成重复操作。 Criando […]