从这往哪儿走 我在GitHub上的swift-lambda-app存储库包含一个在Lambda上运行Swift代码的更复杂的示例。 基于本文概述的思想和AlexaSkillsKit,它为Amazon Echo实现了自定义技能,该技术是为Echo提供支持的语音服务。 我将在以后的文章中介绍Swift中的Alexa Skills。 同时,如果您有任何疑问,可以通过Twitter与我联系。
休斯顿我们有解决方案 学生可以从英语的基于块的编码更改为Swift中的基于块的编码,这正是需要的功能,并且可以为学生提供最吸引人的编码教育经验。 我认为,出于以下几个原因,这是对年轻学生最好的编码教育。 Apple与Tynker合作,创建了《代码1 入门》和《代码2入门》教师指南,其中包含了资源,信息和支持材料。 现在, 几乎 没有编码经验的老师就能在Tynker应用程序中为学生提供带有这些材料的高质量编码教育经验。 Tynker应用程序为学生提供了基于块的编码体验,使他们能够学习块编码的基础知识。 学生准备好后,就可以开始在自己的模块中使用真实的 Swift代码了。 Tynker应用程序的功能使学生能够同时使用块和实际的Swift代码,而这正是需要的。 当老师认为学生已准备好应对该难度级别时,教师将能够向学生询问有关如何解决Swift中一个或多个级别的特定问题。 在块中反复接触和使用Swift代码将使学生对编程类型问题的基本结构,语法和Swift的使用有深刻的认识。 此外,对Swift的这种早期和反复接触将使学生能够更轻松地过渡到Swift Playgrounds中更高级的编码挑战。 在Swift中为来自Vimeo的Brian Foutty的年轻学生编写代码。 Apple和Tynker之间的合作关系为运行iOS 8或更高版本的任何iPad上的K-5学生提供了出色的编码工具和课程。 因此,Tynker将在iPad 2或更高版本的设备上运行。 我很高兴看到我的未来的学生将面临长期的编程挑战,并且他们将在Tynker和Swift Playgrounds等应用程序中使用Swift获得很多学习经验,这些挑战将使我未来的学生能够应对。
我喜欢新的bitbucket外观,因此我将在项目中使用它,顺便说一句,我需要设计应用程序图标和徽标,我想几天后我会收到关于他们的消息。 我打开Xcode,然后选择Create a new Xcode project> Single View Application,并开始创建初始视图。 我有这个初始界面,以编程方式添加了边框和角半径: 我添加了动画,以使该简单的UI充满活力。 结果如下: 我需要弄清楚如何做倒数计时器。 我会继续发布进度。
将内容视图居中在滚动视图内部始终需要大量的手动工作。 您可能会认为在缩小滚动视图时将内容视图居中会很简单,但是事实并非如此。 在WWDC 2017“可可接触的新功能”会议中,一位苹果工程师提到他们花费了上一年会议的1/3来演示如何实现这种效果。 iOS 11改变了这一点。 这是您需要继续执行的所有代码: contentView.centerXAnchor.constraint(equalTo: scrollView.contentLayoutGuide.centerXAnchor) // Do the same for Y axis contentView.centerYAnchor.constraint(equalTo: scrollView.contentLayoutGuide.centerYAnchor) 就是这样! 我喜欢Apple采取的简单功能需要实现几行代码并将其简化为几行代码。 希望每个人都喜欢这种简化的方法! 🙂
MVVM ( 模型视图ViewModel )是用于在编程代码中分离各层的高级体系结构设计模式之一。 它是由Microsoft架构师Ken Cooper和Ted Peters发明的,用于简化UI中使用的事件驱动的编程,它是Microsoft WPF和Silverlight子系统的一部分。 除了MVVM模式外,还有另外2种是众所周知的,它们是MVC ( 模型视图控制器 )和MVP ( 模型视图演示器 )。 在本文中,我将仅描述MVVM。 我将在此处解释与此模式有关的所有必需的详细信息。 另外,我还将在这里以实际示例为例,说明为什么值得在您的iOS应用中使用它以及如何使用它。 愉快的阅读! MVVM将代码分为3个高级层 。 从最低层到最高层看,它们如下: 最低的Model层,负责处理应用程序的领域模型,这些模型可以直接传递到更高的ViewModel层。 除了域模型定义之外,该层还提供存储,更新,删除和获取高层使用的数据的服务。 中间的ViewModel层负责使用较低的Model层提供的数据处理应用的业务逻辑,并对来自较高View层的用户交互进行逻辑处理。 最高的View层负责根据ViewModel的业务逻辑呈现适当的应用程序UI,并在那里处理Model的数据,还负责用户的交互,以捕获并传递它们以供较低ViewModel层处理。 在iOS代码中,当每个较大的组件的基类是UIViewController和UIView时 ,这些类将充当View层。 在下面,您可以找到UML组件图,其中显示了具有相互依赖性的所有MVVM层。 答案很简单,将负责模型,业务逻辑和视图的3个基本层分开,这些基本层始终是每个iOS应用程序的一部分。 并且使它们彼此独立,不紧密耦合,而是相互补充。 使用MVVM模式准备它们使它们也可以在多个地方重用,并且可以独立测试,从而影响更好的代码稳定性和质量。 由于所有代码看起来干净,易读且令人愉悦,因此正好可以轻松地找到不需要集中所有不重要细节的内容。 对于软件架构师和软件工程师而言,最重要的是代码的组织合理,这就是我们所有人都应该追求的! 假设我们想实现一个非常简单的应用程序,使用户能够基于2个不同的搜索引擎来搜索人们的个人公共数据,假设它是Facebook和LinkedIn。 从UI角度来看,这些用户将能够选择上述引擎之一,以输入一些文本进行搜索,然后单击搜索按钮,然后将搜索结果返回给UI。 下面是一个示例性的iOS Swift代码原型,基于以上描述介绍了MVVM模式的用法。 模型组件 从以上所有描述中可以看到,但主要是在呈现的代码和UML图中,当您希望对iOS Swift代码进行分层时,MVVM体系结构设计模式似乎非常有用,尤其是在标题为“为什么要使用MVVM?”。 这就是为什么如果您关心此处提到的要求,并且希望您的代码满足这些要求,那么您绝对应该考虑在您的应用程序中使用这种方法。 我只想补充并强调,这不是实现这些目标的唯一方法,还有更多。 因此,我建议您熟悉其余的现有模式(至少是MVC,MVP,但也可以尝试VIPER作为iOS应用程序中非常流行的模式),然后选择最适合您和您的目的的模式。 您还应该尝试试验现有方法并进行修改。 也许您会发现一些值得关注和使用的新东西。 或者,也许您会发现到目前为止尚不存在的,通用且可重复使用的东西,这不仅是您自己的完美选择,也是我们成千上万的软件设计师和软件工程师的最佳选择。 祝您好运并成功搜索!
使用具有自动尺寸的UITextView对于创建漂亮的表单非常有用。 只需几个步骤,您就可以取得不错的结果。 让我们看看它在UITableViewCell内部的外观如何 具有以下约束,将UITextView添加到UITableViewCell上: 2.在UITextView上将Scrolling Enable设置为false: 3.请注意,我将UITableViewController与静态单元格结合使用,因此我可以为TextView创建IBOutlet并仅覆盖height为Row表示要为tableView声明要在行上使用UITableViewAutomaticDimension。 另外,您还需要使用ViewController实现TextView的委托。 最后,您的代码应如下所示: 这是最终结果。
我第一次听说反应式编程,这就是我的样子: 第二,第三和第四次也没有太大不同。 而且,即使我是第一次从事一个具有一些响应式代码的项目,也不要让我开始……那个表情在我脸上呆了整整两周! 现在我知道,很多人第一次遇到反应式编程时,都会有与我相同的感觉。 我也认识很多人,在经历了最初的不良印象之后,他们再也没有去研究它了,因为这听起来像是付出了太多的努力才开始使用。 但是我可以告诉你的事实是,我不认识一个人,在最终了解了它的工作原理之后,他才后悔参加了反应式编程。 现在我知道在线上有足够的资源来处理反应式和RxSwift的理论和复杂性,还有很多关于如何使用Rx进行各种操作的教程(我在其中最后放了一些链接)的帖子)。 不,我不会再编写有关流和可观察对象如何工作的教程或解释。 我想做的是提供一个简单,清晰,几乎没有理论的摘要,概述您可以使用RxSwift进行的操作以及为什么要使用它。 由于Rx有很多内容,我将在3个博客文章系列中对此进行细分。 让我们开始第一部分! 第1部分:数据绑定,控制事件和手势识别器 数据绑定 “数据绑定”听起来像是花哨的单词中的另一个,使事情听起来很漂亮,但这确实非常简单。 假设您有一个需要用户在文本字段中输入其名称的应用。 当他们这样做时,您要向他们打招呼,说“你好,\(名称)”。 很基本吧? 在非反应式应用程序中,应将UITextFieldDelegate协议添加到视图控制器,并实现textFieldDidEndEditing方法以跟踪用户何时完成其名称的书写,这时应设置标签的文本以对该名称问好。 不幸的是,与代表打交道可能会很烦人。 如果您有多个文本字段怎么办? 您将必须添加检查以确保用户已完成编辑正确的文本字段。 而且,如果客户决定在用户输入姓名时(而不只是在完成文本字段编辑时)更新标签,该怎么办? 在反应式中,这种行为可以通过数据绑定来实现。 简而言之,您想将用户在文本字段中提供给您的数据绑定到另一个UI对象(标签)。 使用RxSwift,没有比绑定数据更简单的了。 在我刚才提到的情况下,这将是这样的: var nameField = UITextField() var helloLabel = UILabel() 覆盖func viewDidLoad(){ nameField.rx.text.map {“ Hello \($ 0)”} .bindTo(helloLabel.rx.text) } 让我们分解一下:首先,我们获取文本字段的文本,然后将其映射为要在标签中设置的格式。 在这种情况下,它只是意味着在文本(又称用户名)之前添加一个问候,由于map是一个闭包,因此可以简单地称为无名闭包参数( $0是第一个参数, $1是第二个参数,依此类推)。 然后,我们将该映射文本绑定到标签中的文本。 就是这样,工作完成了! 没有委托,没有if语句,只有一点简单明了的代码。 现在,我知道您在想什么:这很重要,但实际上有多少应用程序会执行此类操作? 我只能告诉您的是,不要卡在示例中。 能够将数据绑定到视图非常强大,只需考虑一下:您可以根据天气改变视图的backgroundColor,根据一些数据,使用一些非常简单的逻辑,根据用户的位置在商店应用中导航用户可能会改变。 再说一次,我不会对理论进行过多介绍,但这是背后的主要思想。 2.控制事件和手势识别器 […]
Guard语句解决了诸如“厄运金字塔”之类的问题,并将许多条件填充到一个条件(如果有条件的话),这可能在出现错误或错误时引起很多混乱。 警卫还使验证数据更安全! 去年夏天,我承担了调试使用保护语句的程序的任务。 我对自己说:“警卫的言论到底是什么?”。 很好奇,我搜寻了更多关于它们的信息。 最初,我对为什么会使用它感到困惑,但是当我开始使用Swift开发时,我看到了它们的好处以及它们的优点。 根据Apple的Swift编程语言, 如果不满足一个或多个条件 , 则使用保护声明将程序控制权移出作用域。 基本上,您可以将它们视为if语句,但它们会正常退出。 在Swift 3中,guard语句如下所示: 警卫条件其他{ 声明 return / break / continue / throw //使用其中之一 } 与if语句不同,guard语句不仅可以帮助我们尽早安全地退出程序。 它可以验证数据,同时使我们的代码更整洁,更易于阅读。 如果我们正在处理可选选项,则警卫声明将为我们安全地解开它们。 为了更好地了解bae及其优点,我们来看一些示例: 如果有条件: 假设我们有一个Pokedex,其中包含我们已经看到并捕获的所有Pokemon。 我懒得手动计算遇到的次数,所以我决定编写此程序来为我们检查一下。 使用if语句: //示例1 func checkPokeDex(pokedex:[String]?){ 如果让pokedex = pokedex,则pokedex.count <151 { 打印(“您尚未看到足够的口袋妖怪”) 返回 } } 它可以工作,但是让我们通过添加更多参数来想象此功能是否更复杂: //示例2(将示例1想象得更复杂) func checkPokeDex(pokedex1:[String] ?, pokedex2:[String] ?, pokedex3:[String] ?, pokedex4:[String] ?, […]
要完全从您的项目中卸载Pod,您需要安装两件东西,我将在下面进行解释。 在此之前,假设您已经在Xcode项目中安装了cocoa-pods。 Cocoapods-Deintegrate插件 Cocoapods-Clean插件 安装过程 Cocoapods-Deintegrate插件 在终端上使用以下命令进行安装。 须藤gem install cocoapods-deintegrate 2. Cocoapods-Clean插件 在终端上使用以下命令进行安装。 sudo gem install cocoapods-clean 使用程序 首先,从终端转到您的项目文件夹,如下所示。 现在,使用这两个插件将其完全删除,如下所示。 Cocoapods-Deintegrate插件 在终端上使用以下命令首先将项目中的Pod集成在一起。 豆荚解体 2. Cocoapods-Clean插件 将Pod从项目中解集成后,请在终端上使用以下命令彻底清洁它。 豆荚清洁 完成上述任务后,Podfile应该仍然保留在您的项目目录中。 只需手动删除它,或在终端上使用以下命令即可。 rm Podfile 就这样..! 现在,您的项目已从Pod Cleans中解放出来。
在这里,我们使用的是Raspberry Pi,配置了最低Ubuntu 16.04并安装了Swift 3.0。 现在,让我们使用Swift打开和关闭LED! 步骤1:了解GPIO引脚号 核心概念是板上并非所有可用的引脚都是GPIO(通用输入/输出)。 有些是电源,有些是接地,有些是其他东西 。 圆圈内的数字是图钉号 。 这些引脚中的一些与GPIO引脚匹配。 例如, 引脚7与GPIO4引脚匹配。 我们只能控制GPIO引脚,而不能控制其他引脚。 其他的用来给电路加电或做其他事情 。 步骤2:连接电路 我们想创建一个简单的电路,其中通过GPIO4(引脚7)打开LED。 因此,我们创建了一个简单的电路,如下所示: 步骤3:确保我们可以实际在GPIO引脚上设置值 WiringPi是一套从端子控制GPIO引脚的工具。 实际上,出于测试目的,这非常方便。 遗憾的是,这并不像安装deb包那么简单,但是我们需要获取源代码并进行构建。 在确保我们已经安装了一些编译依赖项之前,请执行以下操作: sudo apt-get install build-essential git-core 然后让我们构建WiringPi: 光盘〜 git clone git://git.drogon.net/wiringPi CD接线Pi 。/建立 现在,您可以通过读取所有Raspberry Pi引脚的状态来测试二进制文件是否已正确编译: gpio readall 应该打印这样的东西: 让我们将gpio二进制文件移到根级别,以使其更方便调用: 须藤cp gpio / gpio / usr / bin / 现在让我们设置引脚7 (wPi列中的数字) 作为输出并将其关闭,然后再打开,然后再次关闭: […]