Tag: 编码

我的代码年— 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商店。 你的目标是什么? 你完成了什么?

可编码的NSManagedObject Coredata

在这里,我想分享一下我在Swift 4中使用可编码协议将JSON文件成功转换为CoreData NSManagedObjects的经验,从而避免了笨拙的聚合器层。 因此,想法是获取JSON数据并将其解码为NSManagedObjects Person对象和Car对象 步骤1:选择xcdatamodel,然后为Person ManagedObject和Car ManagedObject单击Editor-> Create NSManagedObject Subclass。 注意:在xcdatamodel中定义Person和Car对象之间的一对多关系 步骤2:现在是时候让Person ManagedObject类符合可编码协议了。 让我们看一下Person ManagedObject的示例。 您还必须对Car NSManagedObject类采用相同的协议。 请注意,在可解码协议中,汽车对象的类型为NSSet。 所以将数组类型转换为NSSet 步骤3:对Car Managed Object类重复上述步骤 步骤4:写入CoreData 瓦拉,就是这样。 您已经掌握了将JSON转换为CoreData Objects的知识。 如有查询,请随时通过pratheesh_db@hotmail.com与我联系。

在Big Nerd Ranch迅速涉足:iOS Essentials训练营评论

免责声明:这不是赞助评论。 大书呆子牧场没有联系我做任何形式的认可。 所有表达的意见都是我自己的。 那不是夸张。 如果您确定要成为iOS开发人员,并且想学习Swift语言的基础知识以及如何在尽可能短的时间内智能设计iOS应用程序,那么Big Nerd Ranch的带有Swift Bootcamp的iOS Essentials就是您的最佳选择。 该课程将花费您$ 5200($ 4680,学生折扣)和整整一周的专心致志。 这是一笔不菲的金钱和承诺。 对我来说,这是值得的。 我借了一笔贷款,将偿还全部4680美元以及我飞往那里的356.39美元的利息。 实际上,我很高兴我必须偿还这笔款项。 这是达到更高,更聪明地工作而不是为了更少而满足的动机。 关于我的一些背景以及我决定参加该课程的原因:我是二十一岁的大学高级双学位,主修计算机科学和经济学,并且拥有两年的主要C语言风格的编程经验。 毕业后我想成为一名iOS开发人员,但是我的学校不提供任何Swift或移动开发课程。 我曾经进行过一次iOS开发实习,并意识到结束之后,我有足够的发展空间作为一名工程师。 我的雄心勃勃的目标是:不仅“学习更多Swift”并“成为一名更好的工程师”,而且真正了解语言,其习语,模式以及按原样设计iOS应用程序的原因 。 我度过了愉快的时光,可以坚定地说,我从这个密集​​而密集的一周中学到的东西比在整个学期的学期里学到的更多。 但是,我只能从课程中学到很多东西,因为我以前的编程经验(以及我的顾问,教授和同学的坚定支持)奠定了相当坚实的基础,并且我知道吸收这些东西对我有用并保留新信息。 不要期望参加,不花力气,而会成为一个知识渊博的开发人员-拿出自己所要投入的东西,尽管您总是会得到帮助,但没有人会牵着手课程。 环境 该课程在佐治亚州石山的万豪常绿会议度假村举行(或者至少是在艾尔玛决定让我们参观之前-以后再介绍她)。 我们的课程在酒店的其中一间会议室内举行,该会议室配有标准配置的书桌,投影仪和翻转板,供教员在上面写字。 有各种各样的小吃和冰箱,里面装有饮料,以防在上课时有人需要点心(相信我,我们做到了)。 我们住过的实际酒店房间超级好 。 我的大学生对“豪华”的定义是自己有一个睡觉的空间。 在Evergreen,我得到了一个带两张床的房间,一台电视,一个壁橱,一间私人浴室,以及我自己的阳台,可在酒店旁边欣赏湖泊的壮丽景色。 当您坐在室外并欣赏湖泊和高大的树木映衬在粉红色,蓝色和黄色的天空下时,日出时起床还不错。 房间,我们所有的饭菜以及往返机场的交通都包含在班费中,这意味着我不得不沉迷于酒店的自助式餐厅。 这里的食物可与其他餐厅媲美,工作人员非常友好和周到,而且我们还有一些保留的桌子供我们自己使用。 在整个星期的中途,飓风“艾尔玛”(Hurricane Irma)受袭,而常绿树失去了力量。 导航楼梯间到我的房间并在黑暗中洗个澡真是一次冒险。 班上有人告诉我们,我们将搬到佐治亚州莱诺克斯的JW万豪酒店。 这次,我的房间是第12楼的套房之一。 我有一张巨大的床和一间带两个镜子,淋浴和一个浴缸的私人浴室。 JW的会议室更宽敞,我们从菜单上点菜而不是选择自助餐。 班上有一些关于哪家酒店的设施更好的争论,但是我坚决支持JW。 我的意思是,什么时候我还能有机会在凌晨2点炸开Lana del Rey时享受豪华的沐浴并吃葡萄番茄? 班级规模/结构 该课程中只有一名讲师,一名助教和大约十二个人。 我们所有人都有大量的以前的编程经验; 大多数人已经作为开发商工作,并已被其雇主派往那里。 上课时间为上午9点,结束于下午6:30,分别有一个小时的午餐时间和30分​​钟的下午休息时间。 我们研究了Big Nerd Ranch […]

在Swift 4中探索可编码和核心数据

也可以在我的投资组合网站PXPGraphics.com上阅读此博客文章。 最近,我曾在LinkedIn和Twitter上询问iOS社区,是否创建允许Core Data在Swift 和 Objective-C中支持Codable的框架是否有价值: 为了简化此数据流,应在应用程序体系结构中将数据,缓存和持久性逻辑抽象到它们自己的层中-这是提出的框架Badger(?)的目的 ,我希望在2019年发布。例如,提议的框架的一些目标包括: JSON序列化 模型验证 对象图管理 内存中缓存 磁盘上的持久性 记录和错误处理 由于该框架承担着许多责任,因此我决定将这些组件分解为本博客系列,标题为Exploring Codable and Core Data 。 为了帮助降低读者的入门门槛,我决定将重点放在每个帖子的几个基本主题上。 该系列将包括以下主题: Codable入门 使用可解码的解码自定义类型 使用可编码的自定义类型编码 (快来了) 核心数据入门 (快来了) 使核心数据成为您的模型层 (快来了) 创建您的核心数据栈 (快来了) 将可编码模型保存到核心数据 (快来了) 从核心数据获取可编码模型 (快来了) 测试可编码模型 (快来了) 测试核心数据模型 (快来了) 注意:我坚信以这种方式共享知识可以帮助来自不同经验和背景的各个级别的读者学习和提高他们的技能,并帮助社区发展壮大。 因此,您的任何反馈,问题或意见将不胜感激。 在此先感谢您,并随时关注更新!

Swift中的JSON解析

我们通常使用JSON从Web服务发送和接收数据。 我们可以在Swift应用程序中轻松使用它。 大多数应用程序完全基于JSON 。 如果您的应用程序正在与Web服务API通信,则它将返回对Dictionary(Object) , Array , String , Bool , Number响应。 在创建模型类之前,我们需要牢记哪种类型的响应将来自Web服务,基于响应,我们将创建Model类。 在本主题中,将涵盖从基本到高级的大部分与解析相关的部分。 🚀 最初,对我来说了解JSON解析是一项艰巨的任务。 在那之后,我意识到这对我来说没什么。 它很容易使用。 只需要了解响应类型。 那就是主要的事情。 🙂 在开始代码之前,我们需要通过点击 浏览器 来检查我们的Web Api – 现在我们在Web浏览器中得到了响应 ,让我们在Xcode进行一些编码 创建用于JSON解析的新项目– 将项目的plist添加到内部作为源打开 将App Transport Security粘贴到项目的plist NSAppTransportSecurity < dict > NSAllowsArbitraryLoads </ dict > 现在使用URLSession针对网络API发出网络请求 我们通过Web API发出的请求正在处理数据,而Error将成为响应。 我在这里使用JSONSerialization内置的Foundation框架,它将JSON数据转换为Foundation 对象 。 在这一部分中,我使用了JSONPlaceholder中的测试API。 警卫让url = URL (字符串:“ https://jsonplaceholder.typicode.com/todos”), 否则 […]

从NSCoding迁移到Codable

对于迟到的用户:Apple 在Swift 4中 引入了 Codable 协议,该协议使您可以将模型类型编码和解码为JSON和属性列表等数据类型,并且可以用来代替 NSCoding 协议来存档数据。 首先,此Codable协议有什么Codable ? 当我们已经有了NSCoding时,学习一种新方法真的值得付出努力吗,这种NSCoding多年来一直可以很好地归档数据? 而且,如果您查看同时实现这两种类型的类型,则它们非常相似。 假设我们有一个Product类型,其中包含标题,价格和数量: 所以-如果它们是如此相似,何必呢? 好吧,有几个很好的理由: 您可能已经注意到, Codable示例中的Product类型是结构而不是类-不必一定是,这只是因为实现Codable协议的类型不需要子类化(提醒NSCoding类型必须是NSObject子类,因此必须是一个类),它们可以自由地为任何类型-类,结构甚至枚举。 动力! 尽管在本文中我主要关注归档到磁盘,但是Codable协议不仅对归档有用,而且对将数据编码或解码为不同的数据类型也很有用。 在撰写本文时,其中包括JSON和属性列表。 如果您只想编码或解码(例如,您可能只是从远程API接收和解码数据),则可以简单地采用Encodable或Decodable协议。 Codable任何具有Codable经验的Codable都可能会在屏幕上大喊大叫! 因此……可Codable协议的Codable在于它具有自动生成其所需方法(编码和初始化)和CodingKeys枚举的能力。 如果您对类型中的Codable属性进行了简单的编码/解码, Codable可以将其省略,并允许编译器自动生成它们,哇! 自动生成很棒,但是在某些情况下,您将需要放弃自动生成的便利,而手动组合其中的一个或全部。 例如: 类型的一个或多个属性可能不是Codable 。 在这种情况下,您需要将其与Codable类型相互转换。 类型的结构可能与您要编码/解码的结构不同。 您可能需要编码和解码不同于类型属性的属性。 您可能要对类型的属性使用不同的名称。 我们已经看到了如何定义模型类型进行比较,但是实际数据归档如何进行比较? 这是使用NSCoding归档和取消归档Product类的数据: 这是由于两个因素: 编码和解码可能会在Codable协议中引发错误。 这是一件好事–这意味着您的应用在使用Codable协议进行编码和解码时不太可能崩溃。 在将数据类型传递到存档之前,您需要手动请求使用自定义编码器对数据类型进行编码。 (对于解码和取消存档也可以相反。) 因此,您可以看到实现Codable协议与NSCoding协议Codable具有其优势。 问题是–我们该如何处理使用NSCoding旧项目? 好吧,当然,我们无能为力。 Apple尚未宣布他们不赞成使用NSCoding ,因此您应该继续使用它。 但是,如果您希望将代码更新为更现代的Codable协议,该如何……? 如果仅将NSCoding类型切换为Codable类型,然后在具有预先存在的NSCoding数据的设备上运行该应用程序,则该应用程序尝试将其归档为Codable数据时,不仅会失败 ,还会因Codable而崩溃 。 对于您的忠实用户而言,这是一场灾难! 一种解决方案是同时采用Codable和NSCoding协议。 旧用户第一次使用该应用程序时,将使用NSCoding协议检索数据。 他们随后保存数据的任何时间,他们都将使用Codable协议进行保存,并且此后将仅通过Codable协议访问其数据。 在不远的将来,您可以决定不再支持使用NSCoding存储的数据。 同时采用NSCoding和Codable协议非常简单。 […]

快速提示:组织

井井有条的项目可以节省开发人员数小时的挫败感和生产力损失。 没有组织项目的行业标准,但是我喜欢遵循一些最佳实践。 项目组织 在考虑项目结构时,请将相关的想法归为一组。 例如,您可能希望将所有网络代码或Core Data代码保持在一起。 您可以根据各种架构组件(例如视图,视图控制器和数据源)来组织事物。 只要有适当的逻辑系统,它并不重要。 这使新开发人员的入职变得容易,现有开发人员也可以更轻松地找到所需的内容。 请记住,文件(基本上)是免费的。 有时将大致相关的类保存在文件中可能会很方便,尤其是在早期原型制作过程中,Swift使其非常容易做到。 但是,以我的经验来看,这会增加您在文件内时正在考虑的事情的数量,并可能导致混乱和混乱。 将大型构想(类,结构,一阶函数等)拆分为它们自己的文件,有助于在尝试了解文件实际包含的内容时降低认知负担。 文件组织 在给定的文件中,还有一些方便的技巧可以使事情井井有条。 Natasha机器人的精彩文章使用Swift扩展“错误”的方式涵盖了我偏爱的组织方式。 对于类,结构和枚举,我们可以使用Swift的扩展功能将相关功能分组在一起。 当遵循协议时,这特别有用,因为您得到的内容如下所示: 扩展MyViewController:UICollectionViewDataSource { func numberOfSections(in collectionView:UICollectionView)-> Int {/ *…* /} func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int {/ *…* /} func collectionView(_ collectionView:UICollectionView,cellForItemAt indexPath:IndexPath)-> UICollectionViewCell {/ *…* /} //注意:还保留其他集合视图数据源帮助程序 //方法也在这里! } 您也可以使用此系统将私人助手或便利方法组合在一起。 使用扩展进行组织的最终目标是以可视化的方式并提高可读性的方式将大型的逻辑代码块组合在一起。 要使这些逻辑块更加引人注目,请在它们上方添加// MARK: — ,以便它们出现在跳转栏中。 专业提示:使用// MARK: — + […]

Readaggregator频道发布的iOS热门文章(2017年12月)。 🎉

如果您错过了11月份 的 上一篇文章 , 请不要 错过,并加入电报频道! 新年快乐! 读聚合器 该渠道汇集了来自许多资源的有趣信息。 因此,如果您对Swift,iOS,Apple和…感兴趣 吨 1. Swift 4中的字符串 由Ole撰写的有关Swift中String体系结构详细信息的详细阅读。 Swift 4中的弦乐– Ole Begemann 深入研究Swift中的字符串处理,重点是它处理Unicode的独特方式。 本文是… oleb.net 2. @ objc和动态 如您所知,在Swift 4中,dynamic在默认情况下不再暗示@objc ,现在它只是一个动态调度,而与Objective-C的可见性无关。 因此,Greg在这篇文章中比较了这两个标志-它们之间的差异是什么,哪个比较慢。 👍 @objc和动态– Swift未装箱 @objc属性控制来自Objective-C的Swift位的可见性。 它再次成为Swift 4和…的焦点 swiftunboxed.com 3.个性化键盘开发人员泄漏了3100万个客户端注册文件。 对于使用Ai.Type自定义键盘的用户而言,这是一个令人震惊的消息! 泄露了大约3100万敏感和可识别的用户数据:电话号码,所有者的全名,设备名称和型号,移动网络名称,SMS号码,屏幕分辨率等。 不再使用自定义键盘。 😬 虚拟键盘开发人员泄露了3100万条客户记录 Kromtech安全中心发现大量客户文件在线泄漏并公开可用… mackeepersecurity.com 4.字符串性能快速提示 快速的String性能胜利。 必须阅读谁将要编写自己的字符串解析器。 字符串可以由Swift String或NSString支持。 通过添加一个空字符串,我们强制它由Swift String支持。 字符串性能快速提示 在这个新的帖子系列中,我们将展示订阅视频系列Swift Talk的亮点。 今天,我们将展示一个非常… […]

Swift 4中的可编码NSManagedObject(核心数据)和CLLocation

在进入主题之前,让我们先讨论一下编码。 可编码 CODE是Swift 4的新功能。它是Decodable协议的类型别名 和可编码协议。 typealias可编码=可分解和可编码 可以反序列化Decodable符合的枚举/结构/类。 例如,将json对象反序列化为结构。 // 宣言 struct Person:可分解{ 命名:字符串 } //反序列化 让jsonString =“”“ { “名称”:“郑正祥” } “” 如果让jsonData = jsonString.data(使用:.utf8){ 让人=尝试? JSONDecoder()。decode(Person.self,来自:jsonData) } Encodable遵循的 enum / struct / class可以序列化。 例如,一个结构被序列化为一个json对象。 // 宣言 结构人:可编码{ 命名:字符串 } //序列化 let person = Person(姓名:“郑正祥”) 让jsonData =试试吗? JSONEncoder()。encode(person) 上面的示例非常简单,但是显示了2个要点 。 如果自定义类型的所有属性都是可编码的,则它是可编码的。 字符串,整数,双精度型, 数据和URL是内置的可编码类型,因此Person是可编码的。 让我们看一个反例。 结构资产{ let属性:Int […]

Swift 4:桥接可编码,JSON和[String:Any]

如果您像大多数Swift开发人员一样,您会欣喜若狂,我们最终对如何在Swift中处理JSON有了明确的答案。 Codable实际上为您免费提供了自定义数据结构的序列化/反序列化。 它开箱即用地支持JSON和Plist,并且它易于扩展的体系结构意味着在接下来的几个月中,我们将在GitHub上看到很多其他选择-我在为您提供YAML。 但是,尽管Swift需要花一些时间为我们提供标准,但社区的其他成员仍然必须与基于JSON的API进行交互。 这导致了各种各样的库和策略。 在大多数情况下, Codable现在提供了这些其他解决方案的批发替代品。 进行切换应尽量避免麻烦,并减少代码行和依赖性。 那是双赢。 想要让我们通过处理JSON序列化/反序列化来提供更多帮助的库的情况有点令人h目结舌。 PubNub是这种方法的一个示例。 这些库希望与Any (通常表示[String: Any]或[Any] )进行交互。 我敢肯定,随着时间的Codable ,这些库中的大部分将包含Codable ,但是现在应该如何与它们集成? Codable为我们提供了一种将自定义对象映射到Data ,因此,如果我们有一种将Data映射到[String: Any]或[Any]那么我们就可以了! 幸运的是, JSONSerialization做到这一点。 因此,一个简单的解决方案是使用JSONSerializtion进行额外的编码/解码,以生成这些库期望的数据类型。 对JSONEcoder和JSONDecoder的扩展很自然地放置了此逻辑,因为您仍然可以访问诸如dateEncodingStrategy类的dateEncodingStrategy 。 结果看起来像这样: 尽管这种方法肯定不会获得任何效率方面的奖励,但它为我们现在需要与之交互的API和光荣的Codable未来之间架起了一座简单的桥梁。