Tag: 编码

iPad的Swift Playgrounds? 非常适合高中生!

成为老师最令人满意和最有意义的部分之一就是看到您的学生掌握一个概念,将其内在化,然后在他们的工作中使用或扩展该概念。 编码教学的最大部分是,我可以看到学生在编码时立即学习的结果。 本周,我们完成了“学习编码2”的“参数”部分。游乐场难题的模式并不困难,但是,正如您所期望的那样,使您的expert和/或您的character完成游乐场难题所需的代码变得越来越具有挑战性。 但是,我的一个学生贾斯汀(Justin)只是把他对“跨河”游乐场的解决方法吓了一跳。 贾斯汀的代码优雅,简单,逻辑且易于阅读(又称表现力代码)。 查看贾斯汀的代码 当学生正确使用while语句时,我会喜欢它。 正确使用说明了他们的代码正在解决问题或执行任务的成熟和更深层次的理解。 因此,学生了解他们的代码在某些情况下解决问题或执行任务的最佳方法是仅让函数执行,直到状态从true变为false或相反为止。 贾斯汀将while语句与两个逻辑“和”运算符( && )结合使用, while增加其变量的值以满足他的while循环和逻辑“和”运算符的布尔值的要求。 难以置信! 贾斯汀(Justin)告诉我,他已经在课堂上完成了操场,然后在晚上回家,又花了一个小时重构他的代码以使其变得更好。 我告诉他,他的辛勤工作和奉献精神体现在他的工作成果中:出色的代码。 Brian Foutty在Vimeo上提出了一种优雅而合乎逻辑的“跨河”解决方案。 我知道Swift Playgrounds应用程序是为中学生开发的理想选择,但它与中学生一样适合高中生。 我在俄亥俄州东北部(世界冠军克利夫兰骑士队的故乡)的职业/科技高中任教。 我的学生来我们地区学习网络和应用程序开发职业技术计划。 我与11年级的学生一起使用Swift Playgrounds应用程序和随附的材料(学习代码1和2和学习代码3)来教他们Swift语言。 我的学生通过Swift Playground应用程序在Swift中学习代码所获得的价值绝对是解决难题,因此被迫逻辑地,有目的地思考。 此外,我的学生正在学习一口有趣且具有挑战性的小巧的程序块,学习了Swift语言最重要的方面。 我认为大多数中学生都可以通过Swift Playgrounds应用获得最佳的初次编码体验。 但我也认为,我的高中生具有更出色的第一次编码经验,因为他们更成熟,更容易理解抽象概念,并且热衷于学习编码(这是职业技术教育中的教学优势)。 我的学生的心理成熟度和学习编码的动机有助于他们学习Swift语言概念并在后来的操场上推广这些概念的整体能力。 我已经看到了许多例子,例如上述的贾斯汀(Justin),我的学生学习了诸如变量之类的概念,然后以适当,新颖,有时甚至是意料之外的方式在随后的课程中正确使用它。 当我们完成“学习代码3”后,我认为我的学生将是我们的理想位置,因为我们以前在Swift Playgrounds应用程序中有最近的学习经验,因此我们将继续使用Swift(教师)(学生)应用程序开发课程来学习Swift。 。 我很高兴看到我的11年级学生将如何学习该课程,而我的12年级学生在开始使用Swift开发App开发之前没有以前的Swift Playground学习经验。 最初发布在iFoutty.com — Swift Teacher

学习Swift和iOS开发第3部分:编程和变量

在这篇激动人心的文章中,我们将讨论变量,运算符以及有关计算机如何工作的一些知识。 这不是理论系列,但是我希望您了解引擎盖下发生的一些基本原理,以便您可以建立基础。 变量在编程中用于存储可以在计算机程序中引用和操纵的信息。 它们还提供了一种使用描述性名称标记数据的方法,以便其他程序员和我们自己可以更清楚地理解我们的程序。 如果有帮助,可以将变量视为保存信息的容器。 它们的唯一目的是标记数据并将其存储在内存中,以便以后在程序中使用。 这是变量是什么以及变量如何工作的基本原理,但是现在您将在Xcode中创建一些变量,以帮助您了解变量在软件开发环境中的工作方式。 首先,如果尚未打开Xcode,请点击Create New Playground 。 给它起一个像Variables这样的名称,然后单击Next 。 选择某个位置以保存此.playground文件,然后单击“ Create以保存它。 您应该会看到类似下面的屏幕。 Xcode中的游乐场是一种测试代码段以查看代码是否以及如何工作的神奇方法。 作为我的讲师,这也是在Swift中教您基本编码原理的好方法。 默认情况下,我们刚刚创建的Playground已经包含一个变量。 上图显示了以下代码。 var str =“你好,操场” 无论您在哪里看到var ,都是变量的缩写。 您告诉计算机要创建一个变量(要将数据放入其中的容器)。 在大多数情况下,我们可以根据需要命名,但不允许使用某些名称。 例如,我们不能将数字放在变量名前面(即“ 2WeeksPay”),但是可以先使用单词,然后使用数字(即“ day1”)。 您也不能使用Swift库使用的某些保留关键字,例如let或enum或class,因此请避免使用它们。 变种 在这种情况下,让我们使用message作为变量的名称。 变量应始终具有描述性,并应告诉您变量中存储了什么。 据说您应该像第一个孩子一样谨慎地命名变量。 var消息 要给变量赋值,就像在任何数学方程式中一样,我们需要使用等号来表明变量等于某物。 var message = 我们在变量中存储了一些单词,其名称为String 。 要声明String ,必须使用双引号,如下所示: var message =“在此处插入字符串信息…” 我们在此处编写的代码的关键术语是String Literal因为我们为String Literal提供了固有的值。 稍后,我们将看到如何创建一个带有空值或根本没有值的字符串。 让我们通过从引号中删除“ Insert String information […]

如何在技术面试中提问

在最近的一篇文章中,我提供了准备工作时要考虑的事项的概述。 技术面试。 该内容的一部分已扩展为视频,包括一个用于进入白板时回答棘手问题的基本框架。 即使我专门研究iOS开发 ,该过程也足够通用,因此可以应用于任何编程语言: 提出澄清问题 创建一个概念图 在伪代码中表达蛮力解决方案 使用可行的代码优化您的解决方案 检查错误或遗漏 当在时间限制下编码或处理不熟悉的主题时,遵循一组预定义的步骤变得尤为重要。 让我们看看如何使用此过程来回答以下问题: “ ..您将如何设计一个Stack类,除了push和pop方法外,它还具有一个属性计数,该计数返回元素的数量? 推,弹出和计数都应在O(1)时间内进行。” 什么是堆栈? 作为iOS开发人员,我们习惯于使用Swift和iOS SDK来构建用户界面元素,流程和应用。 这个问题提供了价值,因为候选人(正确地)假设Stack不是开发中通常使用的东西。 从候选人的角度来看,这个问题的答案可以将管理UITableViews的日常活动与UINavigationController联系起来 。 什么是O(1)时间? 这个答案将揭示人们应该如何考虑算法的性能。 通过了解恒定时间的重要性-O(1),他们将看到以相同速度执行的流程具有显着的优势-无论其输入大小如何。 即使在面试中问这个问题是最好的做法,但事先学习Big O Notaton也会带来很多好处。 大声思考 我们都听说过这个,但是在实践中,很难遵循。 在解决问题以最终找到解决方案的过程中,我们需要让面试官知道我们的想法-即使我们的想法看起来很愚蠢或半生半熟。 在大多数情况下,面试官希望您成功,因此他们将寻找机会引导您朝正确的方向发展。 没有任何口头反馈,他们将无能为力。 众所周知,这通常是在事情变得紧张而尴尬的时候。 优化您的解决方案 在面试中编写代码时,最好的做法是编写一个“可行”的基本解决方案,然后继续完善其语法和功能。 在性能方面,这通常会转化为在O(n)甚至O(n2)处构建可行的解决方案。 这个两步过程不仅提供了收集您的想法的机会,而且还使面试官知道您处在正确的轨道上。 最后,当您将代码重构为最终解决方案时,请问自己,如果必须处理1M数据行,该算法将如何执行? 重新定义问题通常可以使您的解决方案的各个部分看起来很扎实,但可以进一步加以改进。 代码 这是在Swift中实现的完整Stack类: //恒定时间操作-O(1)类Stack { var store:[T] = [] func peek()-> T? { 返回store.last } func push(_ […]

Swift,Xcode和iOS我的冒险

书签忍者是一个Web应用程序,可在台式机和移动设备的浏览器中运行。 在移动设备上,它具有看起来像本地移动应用程序的移动专用Web UI。 在桌面浏览器中,它使用书签和浏览器扩展,可以将当前网页链接发送到Ninja。 当前,在移动设备上,您只能通过通过电子邮件将链接发送到专用电子邮件地址(点击共享然后选择电子邮件)来执行此操作。 但是,使用此解决方案,您将无法添加标签或设置目标选项卡/类别,而无法在书签和扩展名的帮助下在桌面浏览器中进行操作。 因此,现在该为移动浏览器找到更好的解决方案了。 最终的解决方案是本机移动应用程序,它实际上是移动浏览器的共享扩展应用程序。 计划A 最初的计划是开发一个完整的本机iOS应用程序,该应用程序通过RESTful API与Ninja服务器通信。 3年前,当我学习Java类时,我了解了REST,但是我从未使用过REST,因此经验为零。 此外,引入REST也会影响服务器端,而不仅是客户端iOS应用程序,因此还有更多工作要做。 另一个挑战是Swift。 5年前,我开始在Objective C中开发iOS游戏。我从事该游戏的时间为一年。 然后我放弃了,我没有完成项目。 我还记得我不是Objective C和Xcode的忠实拥护者。 我读到Swift比Objective C有很多改进,所以我非常期待熟悉Swift。 计划B 当我开始担心该项目所需的工作量时,尤其是考虑到REST和Swift的不确定性时,计划B就出现了。 我的想法是通过在iOS应用中拥有Webview来简化事情。 实际上,在Web视图中,就像在浏览器中一样,您通过https访问Ninja服务器,并且UI看起来像本机移动应用程序(使用PrimeFaces mobile / jQuery mobile)。 使用此解决方案,我可以赢得以下成就: 完全不需要REST,因为我通过https访问Web视图中的服务器 只需编写更少的Swift代码(所有“添加书签”功能都已包含在已经用Java开发的webview中) 用户身份验证也可以在webview中完成(已经使用Java开发) 我认为这是一个很棒的主意,因此我决定采用计划B。以这种方式实施iOS共享扩展只用了几天。 我可以为计划B节省很多时间,所以我认为这是一个不错的决定。 仍然不是Swift和Xcode的忠实拥护者 尽管实际上只花了几天时间就编写了共享扩展名,但是Swift和Xcode还是令人失望。 在使用Xcode在Swift中进行Java和Eclipse编程之后,感觉就像倒骑了。 我无法更好地解释我的感受,但我认为有些人可能知道我的意思。 我只想谈谈我的一些经历: 我觉得API支持并不是真的对开发人员友好。 创建项目时,我必须选择共享扩展目标。 例如,这是关于在浏览器中共享网页。 因此,我认为获取标题和URL有点是something.getUrl()和something.getTitle()。 不,不是这样。 您必须编写15(!)行代码才能获得url和标题。 而且我没有在苹果官方开发文档中找到这15行代码,而是在不同的论坛和Stackoverflow上找到了这15行代码。 向后兼容性…当我在网上搜索某些东西时,发现的大多数Swift代码都在Swift 1或2中。当我尝试使用这些功能时,结果发现它们中的大多数已被折旧,删除或重命名。 3.因此,每年都有新版本的iOS发布时,我必须更新代码,重新生成并重新提交应用程序吗? 我无法调试…断点不起作用,“打印”没有打印到控制台。 我在网上搜索了此问题,并找到了很多有关此主题的讨论。 我尝试了所有建议的方法,但没有帮助。 最后,在代码中添加了iOS“ tweet”音效,以检查代码的这一部分是否运行。 […]

在大草原学习iPhone开发。 免费。

选择Codebase进行iOS教育的10个理由 从9月18日开始,Codebase将提供为期9周的密集iOS训练营,以教会您Swift中iPhone编程的来龙去脉。 (Pssst!没有学费!)这就是为什么您应该申请: 1.手机占主导地位 2016年发生了一件重要的事情:拥有智能手机的美国人数量超过了拥有台式计算机的美国人数量。 在全球范围内,自2014年以来就是这种情况。移动是未来,但现在就在发生未来。 随着所有令人兴奋的新技术进入市场,这些新技术有望改变我们看待世界的方式,因此再没有比这更好的时机了。 2.专家指导 Codebase的讲师是成功的,工作的iOS开发人员,他们了解他们的知识。 首席讲师Max Howell自首款iPhone推出之前就开始为移动平台进行编程,并曾开发过TweetDeck(自Twitter收购以来),Popular Pays和Poncho等产品,这些产品最近在Apple 的App Planet电视节目中出现音乐。 Max还是Mac的Homebrew软件包管理器的创建者。 听他为Changelog播客所做的采访! 3.代码是未来的语言 编码是新的素养,尽管语言,工具,框架和技术始终在变化,但良好的基础将帮助您跟上发展的步伐。 我们在Codebase的目标不仅仅是教您如何构建令人印象深刻的应用程序; 我们希望为您提供知识,以找到所需的答案,并激发您无畏的探索,快速行动和打破事物的愿望。 4.沉浸式学习是最好的 我们认为,掌握技能的最佳方法是潜入水中。如果您想学习日语,那么您将移居日本以获得最佳成绩。 代码库是您转向Swiftland的象征性举动。 每天沉浸在该语言中会增强神经通路,为您的体验提供背景,并帮助您保留和建立自己的技能。 5.一起学习更好 有很多很棒的在线资源可供您学习编码。 这些没有提供的是一群正在分享您经验的同学。 当您在社区中学习时,您可以获得各种知识,经验和不同的观点……并且有双重动机将其全部消灭。 6.南方美丽,和平且负担得起 编码训练营在大城市里比比皆是,但是城市生活带来的压力(噪音,人群,交通)可能会让人分心。 美丽的南方地区的慢节奏是思考编程逻辑奥秘的理想环境……此外,如果您是从外地访问,您将节省几美元的生活费。 7.萨凡纳适合技术人员 如果您遇到技术聚会,萨凡纳不会令人失望。 技术社区活跃,多元且包容,并且总有事情在发生。 看看我们的朋友发生了什么事: 创意海岸•techSAV•萨凡纳开放•ATDC•启动研磨• Geekend•移动性•公会厅•佐治亚州沿海地区的SDVC 8.我们可能为您找到工作 我们旨在为想要在萨凡纳生活和工作的高级毕业生提供带薪的学徒机会。 选择将取决于许多因素,但作为最低标准,您应该计划每天都参加并努力工作。 9.不收学费! 我们之前已经说过,但需要重复:2017年9月我们的iOS训练营所需的唯一投资是您的时间,精力和必要的设备-MacBook和iOS设备。 与学费高达15,000美元的计划相比,这简直是天方夜谭。 因此,您可以为代码节省脑力。 10.我们可以使我们的世界更美好 世界面临的问题似乎是无法克服的,但是我们可以尽我们所能,使我们的生活变得更好。 我们将尽一切努力来传播知识,创造就业前景,帮助当地企业并改善人们的生活。 来到Codebase时,我们希望您会受到启发,将您学到的东西带入您的世界,并尽一切努力使它变得更好。 在8月30日或之前提交您的申请! 任何问题? 向我们发送电子邮件至hello@codebasesav.com。

编写敏捷测试

使用Quick / Nimble进行更好的iOS测试 我们所有人都希望尽快构建和发布我们的移动应用程序。 但是,它们还需要高质量,稳定并具有用户喜欢的功能。 以下是在iOS应用程序上优先进行测试和使用Nimble可以如何帮助实现这一目标的方法。 为什么测试很重要 当测试花费更多时间时,为什么还要优先考虑编写测试? 软件不再是您可以运送和忘记的物品。 它必须维护并随时随用户需求的变化而发展。 在您的应用中拥有用户后,您需要保持高质量,并确保令人愉悦的用户体验。 使用移动应用程序时,您会额外增加一层复杂性。 连接弱或没有连接时会发生什么? 如何处理不同尺寸的屏幕或微弱的GPS信号? 如果您不考虑这些情况,您的用户将为您找到它们。 手动测试在用户发现问题之前起着重要的作用,但是您不能在每次更改后合理地测试每个功能。 这就是自动化测试的用武之地。 在哪里集中精力 尝试测试应用程序中的每一行都很繁琐,并且收益递减。 有用于检查特定代码段或功能的单元测试,用于查看部分或几个系统如何交互的集成测试以及采用UI测试形式的系统测试。 您首先要建立单元测试的基础。 它们是最快的开发工具,可在失败时准确告诉您问题出在哪里。 专注于在不同领域中使用的代码的核心部分。 实用程序和扩展程序是一个很好的起点。 每当发现错误时,您还希望编写一个测试,以免重新引入它。 没有比引入并必须多次修复的错误更令人沮丧的了。 此外,针对您可能想到的任何特定边缘情况编写测试。 如果您具有当某人刚好达到1000小时(或您测量的时间)时执行操作的功能,请编写涵盖0、999、1000和1001的测试,以确保您在正确的时间返回正确的事物。 敏捷的好处 Nimble是一个匹配器框架,这意味着它可以帮助您比较两个变量。 它取代了XCTest内置的XCTAssert函数,并具有一些重要的好处。 坦率地说,XCTAssertions使用起来很不方便 可读性是用Nimble代替XCTAssertions的最大好处。 Nimble使用了Expect函数,它完全按照您的想法进行操作。 在此示例中,我希望我的变量等于第二个变量,并且可以! 期望(实际)到(等于(预期)) Nimble的另一个重要功能是默认失败消息。 使用XCAssert和Nimble,您都可以编写自己的故障消息,有时还是应该这样做。 但是,您有可能使该消息变得不正确。 一堆自定义消息使代码更难阅读,更新也更慢。 尽管您从XCTAssert中没有任何帮助,但Nimble会显示一条默认消息,告诉您期望值与实际值之间的关系。 Nimble还可以使用toEventually和waitUntil优雅地处理异步代码。 最终,该功能将定期检查并在expect解决或超时时继续运行。 UI测试和等待动画解析时特别方便。 DispatchQueue.main.async { ocean.add(“海豚”) ocean.add(“鲸鱼”) } 期望(海洋)。到最终(包含(“海豚”,“鲸鱼”)) 函数waitUntil允许您等到测试用例完成之前调用完成,从而使您在进行API测试时具有灵活性。 waitUntil {完成 ocean.goFish {成功 […]

没有上下文类型可编码,无法解析对成员的引用

在这里,我想分享一下我的经验,即为NSManagedObject类实现Codable协议时解决此编译错误。 当我们尝试编码NSSet类型的汽车对象时,就会出现错误。 汽车对象是CoreData NSManagedObject生成的类。 解决方案:经过广泛研究,我们必须达到的解决方案是在支持Objective C对象方面,codable存在一些潜在问题。 NSSet是Objective C类型。 因此,将NSSet更改为Set可以解决编译问题并发挥作用。 学分到 :Sathiyanarayanan,印度钦奈 如有任何疑问,请随时通过pratheesh_db@hotmail.com与我联系。

发布应用并获得有机增长

我的回应让我感到惊讶,我收到了70多个投票和20多个评论。 反馈是100%正面的,有人回答说它是“这里最好/最简单的评分应用程序”,并且比付费替代版本更好。 知道我所创造的产品对社区中的其他人都是有益的,这让我感到非常高兴。 在将应用发布到reddit仅仅几天后,我就检查了分析功能。 它已经获得了160多次设备下载和3000多次印象,这似乎不算什么,但是对于我最初为少数人开发的应用程序,它收到了积极的成果,并且被发现真正有用的人们使用。 关于子Reddit的投票最多的评论之一是请求Android应用程序。 展望未来,我将专注于尝试在Google Play商店上启动并运行该应用程序,并添加用户在该线程上建议的某些功能。

可编码—改进解码JSON的4种方法

Swift 4中引入的Codable提供了一种方便,轻松的方式来编码和解码JSON。 但是,并不是所有的东西都开箱即用。 Swift 4中引入的Codable提供了一种方便,轻松的方式来编码和解码JSON。 但是,并不是所有的东西都开箱即用。 例如,让我们看一下Twitter中的JSON文件。 作为JSON解码器工作方式的结果,我们看到: 引用和标准推文使用相似但不完全相同的字段。 转换为属性名称的键不遵循Swift约定。 日期不是采用标准的接受格式。 颜色的格式不受任何Color类 (UIColor,NSColor等)接受。 因此,我们将学习如何为某些特殊情况设置您的Codable类型。 具体来说,我们将研究: 对可编码类型使用协议 不同的属性名称和键 属性值中的日期 自定义类型的属性值 要继续学习,您可以在GitHub上查看本文的Xcode游乐场。 JSONDecoder的工作方式 这些是JSONDecoder如何将JSON转换为结构化类型的基本规则: 属性名称按原样转换。 默认情况下,简单属性值将转换为String , Int或Double 遵循正确格式的属性值可以解码为URL , Data或Date 。 任何属性值都可以认为是Optional 方括号[]值将转换为Array 花括号{}值将转换为Dictionary或自定义类型。 所有需要解码的类型都需要实现Decodable协议。 同样,需要编码的类型需要实现可编码协议。 如果需要同时对类型进行解码和编码,则可以简单地实现Codable。 在这种情况下,我们将查看为一条推文返回的Twitter JSON数据。 因此, 我们要做的第一件事就是为每种返回的数据类型创建一些基本结构 。 结果,您可以在仓库的此分支上查看解码工作的第一步。 即使数据相似,我们也会创建单独的结构以提供更大的灵活性。 但是,这并不意味着我们不能使用协议来简化功能中这些类型的使用。 将协议与可编码一起使用 例如,在Twitter API中,始终使用tweet的概念。 举例来说,他们的JSON有一条主推文和一条引号 。 因此,可能倾向于对两者使用相同的结构。 但是,更好的方法是两个单独的结构: public struct Tweet:可编码{ public […]

可编码

快速浏览XCode 9和Swift 4的详细信息。 JSON格式的可解码和可解析的JSON格式的可转换代码。 Es bastantefácilde usar可以使用cquiquier arquitectura。 1.¿可编码和可解码吗? 可编码的无定形变换是一种外部代表性的变换。 JSON格式的转换对象。 易腐烂的,可变形的和不透明的代表。 JSON和JSON的可解释性。 2.,可编码吗? 前可编码的简单编码。 可编码和可解码的可实现的Cucando实现方式 typealias可编码=可分解和可编码 3. Objeto可编码 结构体枚举的可编码的实现类 。 Para formar un objeto可编码partiremos del siguiente JSON: [ { “ firstName”:“ Alvaro”, “ surName”:“ Royo”, “ alias”:“ FreeWorld”, “年龄”:22, “身高”:1.8 }, { “ firstName”:“ Nacho”, “ surName”:“García”, “年龄”:26, “身高”:1.84 } ] Y crearemos un […]