Tag: swift

Como Programar en Swift con iOS 12(第3部分)

Bienvenidos a la tercera parte de esta serie de tutorials。 《从前的事实》到《从无到有的事实》 。 从本质上讲,它是一种可组合的,可转换的组件,还可以在ViewController和Podigo中进行修改。 可以从任何人那里得到的东西,可以使您在任何时候都可以使用的东西,可以在任何时候都可以使用。 您可以使用Vamos Hacer或Funcionen! Vamos a mostrar una alerta cuando elbotón“ Calcular” haya sido pulsado。 没有人打扰到我。 Para eso vamos a escribir algo decódigoSwift😎💪 -> 工程浏览器 ,单击ViewController.swift El Interface Builder为 WTF color着色。 Esto es elcódigoSwift de tu应用程序: 的功能,没有接收到Agrega la siguientelíneadecódigodebajo de laúltimallave的信息,didReceiveMemoryWarning didReceiveMemoryWarning() @IBAction […]

Yap数据库简介

如果语法一开始看起来很奇怪,请不要紧张,我们将逐一逐一讨论。 让我们一次分解每个块。 首先,有一个分组块,确定要在视图中包括哪些对象。 需要注意的重要一点是,在初始化视图时,将对数据库中的每个对象以及由写入事务添加或修改的每个对象运行此方法。 从图书馆的例子来看,这类似于W太太第一次编译书籍清单时以及她检查图书馆中每个新添加的内容以查看其是否满足任何现有清单的标准时。 现在我们有了分组块背后的想法,让我们看一下代码本身。 首先,注意参数列表中省略的参数(即参数名称的“ _”空格)。 这些省略的参数提供了有关传递到块中的对象的更多信息,例如其集合和键值。 但是,我们通常只检查对象以确定是否应将其包括在视图中。 (更多信息可以在这里找到) 一旦确定对象是否应包含在视图中,我们将以字符串形式返回要为其分配对象的组的名称 。 在这种情况下,guard语句会验证我们的输入。 在将对象添加到组之前,我们需要确保它是一本书。 如果验证失败,我们将返回nil并且该对象将不会分配给任何列表。 如果通过,则返回title的第一个字符 。 为什么要这个值? 请记住,我们正在返回要将对象分配给的组的名称,因此我们将在“ 两个城市的故事 ”中返回“ A”。 排序块是创建视图的第二个组件。 在图书馆的例子中,这相当于W夫人问如何对已编译的书籍清单进行排序。 排序方法与典型的比较方法非常相似:参数是组中的两个任意对象,返回类型是NSComparisonResult,表明我们希望如何对它们进行排序。 再一次,在最初编译列表时以及在每次向数据库进行新的写入事务时都将运行此逻辑,因此可以确保始终对列表进行正确排序。 我们创建的视图如何将数据转换为tableView? 简单:我们使用了一个漂亮的工具,称为mappings 。 如果您考虑上面的图像,我们的视图已经被填充和排序,因此tableView已经为我们构造了很多。 现在,我们只需要将每个组映射到其关联的UITableView部分。 (注意:这对于collectionViews同样适用。) 我们可以使用两种策略将每个组映射到其关联的tableView部分。 首先,我们可以静态声明映射及其顺序。 但是,这种策略非常脆弱,特别是因为如果没有任何以该字母开头的书,我们可能无法查看字母表中的每个字母。 相反,有一种更好的策略,即动态声明映射。 本质上,我们希望找到一种方法来告诉Yap映射中包括哪些组以及应如何对映射进行排序。 听起来有点熟? 这正是我们在早先需要确定应包含在视图中的内容时使用的分组和排序块。 我们在这里使用相同的策略来确定如何将组映射到tableView节。

WWDC 2016聚焦:Swift 3

Swift在2014年发布后很快就被我们的开发人员和许多其他开发人员所采用。但是,随着Swift在WWDC 2016上宣布的第一个重大更新,苹果可以期望其编程语言在社区中得到比以往任何时候都更多的使用和优化。 苹果去年12月发布了Swift作为开源项目。 从那时起,开发人员一直在努力使语言无缝化。 此外,Apple的内部团队已在更多自己的应用程序中使用Swift,包括新的Music应用程序,Console应用程序以及Agents和Daemon画中画功能。 Xcode 8中的新文档查看器以及iOS的新Swift Playgrounds完全用Swift编写。 Swift 3是Apple开发人员和应用程序创建者广泛社区中的开发人员辛勤工作的产物。 Black Pixel开发人员Kai Schaller和我想分享一些有关该语言最近的更改以及这些更新将如何影响开发人员的初步想法。 对图书馆发表意见 直到Swift 3为止,感觉Swift的主要关注点是发展观点并维护与旧式Objective-C代码库的互操作性。 Swift 3是说“我们认为我们找到了声音”的版本。Swift3是Swift开始将其意见强加到现有库上的时候,其中的表现就是对系统提供的类进行了重命名,并删除了NS前缀。我们已经知道了几十年了。 这种变化进一步扩大,因为数十年来我们一直使用的许多C API都将进行面向对象的改造,如“ Swift API设计指南” WWDC会话中所详述。 代码迁移中的障碍 由于Swift 3是非源兼容的更改,因此Apple在Xcode中提供了迁移助手。 在一些现有的Swift代码上运行此迁移工具表明,转换几乎是无痛苦的,但是如果不更改某些类引用并修复一些不再有效的方法调用就无法完成。 当然,必须要提到的是,这些问题与迁移器的第一个beta版本有关,并且随着该工具越来越接近发行版而可能会得到修复或更改。 无法自动翻译的一些不完整的代码示例包括: Swift 3希望枚举值以小写字母开头,并且通常会自动对其进行修复。 但是,如果以完全指定的方式引用枚举值,例如“ DataError.Unknown ”,它将不会小写该值的第一个字母(在这种情况下为“ u ”)。 NSMutableURLRequest不再存在。 它已被替换为“ URLRequest ”,现在是一个结构而不是一个类。 存在的对NSMutableURLRequest的任何引用都需要手动更改。 另外,由于URLRequest是一个结构,因此如果调用任何修改请求的方法,则需要将其存储在变量( var )中而不是常量( let )中。 现在,如果方法返回值并且没有分配任何值,即使忽略返回值不是错误,这也是警告。 要使警告静音,方法调用的结果需要手动分配给“ _ ”。 转换过程中的异常 尽管有新的约定默认情况下按名称引用所有参数(而不是自动省略第一个参数名称),但是Swift 3转换过程会将“ _ ”添加到函数的第一个参数,而不是在代码中添加参数名称调用该函数。 […]

关于设置的一点

1个 我将深入探讨Swift编译器内部。 我认为最好做一点笔记并描述整个旅程的步骤。 目前,我对Swift或LLVM的内部知识一无所知,但对我在大学期间学到的编译器有一些常识。 因此,这些说明对将要跟随我并了解快速编译器实际工作原理的每个人都是有用的。 我将在每个步骤之后写一个简短的摘要。 而且,我认为从公开准备步骤开始非常重要,以便在我的机器或OS发生问题时能够重现环境。 步骤1.获取源代码并进行一些调整 我从探索swift.org开始。 有一个名为“编译器和标准库”的页面,其中包含编译器体系结构的简要概述以及指向主存储库的链接。 可通过github获得源代码。 README.md包含使用Ninja和CMake设置和构建编译器以及创建.xcodeproj的所有信息。 我选择了后者。 〜$ utils / build-script -x 它可能会运行很长时间。 在构建过程中,我试图准备自己阅读swift.org上的所有可用文档。 它指出编译器由几个模块组成,每个模块代表下一个抽象级别:解析,语义分析,SIL生成,优化,最后是LLVM IR生成阶段。 我将重点介绍官方文档中缺少的内容。 生成的Swift.xcodeproj可以在build / Xcode-DebugAssert / swift-macosx-x86_64 /子目录中找到。 当我第一次打开它时,Xcode用一个模式提示向我打招呼: 但是我可以完成任务,并通过一个简单的步骤解决了该问题: 我做了什么? 我为尚未存在的目标BUILD_ALL添加了构建方案,并设置了可执行文件以使用lldb进行调试: 太容易了。 因此,是时候启动并尝试调试可执行文件了,不是吗? 设置断点,按Cmd + R并… 程序以退出代码结束:0 执行并没有在我的断点处停止。 嗯当然了 我尚未将源文件传递给进程。 使用/path/to/working/dir/A.swift和…调整启动时传递的参数 。 程序以退出代码结束:0 在这里我卡住了。 步骤2.探索执行流程 在继续之前,让我们深入了解swiftc的工作原理。 我的意思是,当您通过命令行调用swiftc并将其传递给源文件时,它会做什么。 你知道吗? 我也不。 我认为这非常简单:迅速的编译器读取输入参数,实例化环境,然后启动lexer,解析器,AST分析器等 。 它的工作方式是这样,但前提是您传递了命令行参数的特定顺序。 通常,它只是设置并启动其他程序来编译,分析和链接可执行文件。 […]

设计模式—创新模式— Swift中的工厂模式

作为一名崭露头角的计算机科学家,您无疑已经听说过课堂和学习途径中的设计模式。 设计模式是蓝图,概述了创建可重用的面向对象代码,解决常见软件问题的最佳实践。 为了避免给您带来长期的历史教训,我将描述设计模式的起源可以追溯到1970年代,但是随着1994年发布并由Erich Gamma撰写的《设计模式:可重用的面向对象软件的元素》的发布而获得了广泛的接受。 ,理查德·赫尔姆(Richard Helm),拉尔夫·约翰逊(Ralph Johnson)和约翰·弗利斯赛德(John Vlissides),统称为四人帮 (GoF)。 由于对23种经典软件设计模式进行了描述,因此该书大获成功。 设计模式对于帮助您将复杂的系统分解为通常适合于GoF描述的一种设计模式的组件非常有用。 因为我知道作为开发人员,我们喜欢学习,有时需要快速参考才能更好地完成工作,所以我要花时间写一系列文章,这是第一篇,以展示如何使用每种GoF设计模式在Swift中。 通常将设计模式分为几类相关的类别:创建模式,结构模式和行为模式。 在本文的其余部分,我们将重点介绍“ 创造”模式,并介绍我们的第一个模式:“ 工厂”模式。 创作模式:工厂模式 创建模式都是关于消除创建对象所涉及的复杂性的方法。 工厂模式是一种封装创建对象的实现细节的方法,该对象遵循通用的基类或接口。 工厂模式允许接收创建对象的客户端通过公共接口使用对象返回,而无需关心实际创建的具体对象的类型。 工厂模式将创建对象的实现细节与允许用户通用使用该对象的公共接口分开。 让我们考虑一个使这个想法更具体的例子。 想象一下,您经营一家猎头公司,其所有线索均来自各个工作委员会。 对于每个工作委员会,您都收集联系人详细信息并针对潜在的“目标”进行简历。 我的意思是求职者。 获得联系信息后,您可以对其进行分类,并向每个联系人发送样板电子邮件,告知潜在客户与他们的潜在匹配。 您想自动化该过程,因为您每周都要连接数百个潜在客户。 从本质上讲,您只是“以美元计价”,因此您可以处理的潜在客户越多,将潜在客户放置到头寸中的机会就越大,获得报酬的可能性就越大。 我们可以并且将使用工厂模式来解决此问题,以处理电子邮件模板的创建。 我将使用Swift Playground展示一种可以使用工厂模式实现目标的方式。 您可以在这里找到我用于此帖子的操场文件。 为简化起见,我们假设每个联系人将具有个人详细信息以及他们所寻找的角色类型。 首先,我们将创建用于将定制的电子邮件发送给潜在客户的接口(或更确切地说是协议),其中包含有关他们正在寻找的工作类型的信息。 而已! 我们的工厂示例已完成。 现在,我们可以根据他们寻求的工作类型向他们的联系人发送自定义的电子邮件。 只要我们的需求发生变化,我们就可以扩展我们的示例,并且只要我们的界面不变,就不必更改客户端使用的代码。 这意味着我们可以添加新的作业和求职者对象,以将自定义的电子邮件发送给新的联系人类型,而无需更改使用JobContactProtocol的客户端。 我们还可以更改用于创建模板的逻辑,因为这仅包含实现更改。 包起来 工厂模式使我们可以通过允许客户仅依靠公共接口与对象进行交互来隐藏创建对象的实现细节。 这使我们可以消除创建具有类似行为需求的对象所涉及的不必要的复杂性。 工厂模式还促进了分离和抽象,这两者都导致了易于维护的可重用代码。 您可以在此处找到本文的游乐场文件。 简要地说,我还写了一篇文章,说明为什么创建本地应用程序可能是大多数移动开发工作中最好的方法。 阅读并参与讨论! 您的混合应用程序将杀死您 如果您的公司仅开发混合应用程序,那么最终您将蒙受损失。 这只是时间问题。 混合手机… medium.com 如前所述,我将完成一系列有关设计模式的文章。 您可以在下面的文章链接中阅读有关装饰器模式的下一篇文章。 Swift中的设计模式—结构模式—装饰器模式 […]

进入Swift 3

刘承 银 , Paul Kompfner 和 Michael Bachand 自从该语言诞生以来,Airbnb就一直在使用Swift。 使用这种现代的,安全的,社区驱动的语言,我们已经看到了许多好处。 直到最近,我们的大部分代码库都在Swift 2中。我们刚刚完成向Swift 3的迁移,正好赶上了放弃Swift 2支持的Xcode版本。 我们希望与社区分享我们的迁移方法,Swift 3对我们的应用程序的影响以及我们在此过程中获得的一些技术见解。 “不破坏发展”的方法 我们有许多用Swift编写的模块和几个第三方库,其中包括成千上万的文件和成千上万的代码行。 似乎这个Swift代码库的大小不足以挑战,Swift 2和Swift 3模块无法相互导入这一事实使迁移过程变得更加复杂。 即使导入Swift 2库的正确Swift 3代码也不会编译。 这种不兼容使并行化代码转换变得困难。 为了确保我们可以逐步转换和验证代码,我们首先创建了一个依赖关系图,该关系图对36个Swift模块进行了拓扑排序。 我们的升级计划如下: 将CocoaPods升级到1.1.0(以支持必要的Pod升级) 将第三方Pod升级到Swift 3版本 按拓扑顺序转换我们自己的模块 通过与已经完成迁移的其他公司交谈,我们了解到冻结开发是一种常见策略。 我们希望尽可能避免代码冻结,即使这对于进行迁移的人员来说也增加了一些难度。 由于转换工作将不容易并行化,因此“多手协作”方法效率低下。 另外,由于很难估算转换所需的时间,因此我们希望确保在迁移期间可以继续发布新版本。 我们有3个人从事迁移工作。 有两个人专注于代码转换,而第三个人则专注于协调,与团队沟通和基准测试。 最后,包括准备工作,我们的实际项目时间表如下所示: 1周:调查和准备(一个人) 2.5周:转换(两人),分析转换的影响以及与较大团队的沟通(一个人) 2周:质量检查和错误修复(质量检查小组+各种iOS功能所有者) Swift 3的影响 尽管我们对Swift 3的新语言功能感到兴奋,但我们也想了解该更新将如何影响我们的最终用户和整体开发人员体验。 我们密切监视了Swift 3对发行IPA大小和调试构建时间的影响,因为到目前为止这是我们最大的两个Swift痛点。 不幸的是,在尝试了不同的优化设置之后,Swift 3在两个指标上的得分仍然略差。 发行IPA大小 迁移到Swift 3之后,我们看到发行版IPA增加了2.2MB。 一点挖掘表明,这几乎完全是由于Swift的库的大小增加了(我们自己的二进制文件的大小几乎没有变化)。 以下是一些我们发现未压缩二进制大小增加的示例: libswiftFoundation.dylib:增长233.40%(3.8 […]

如何在每个Git提交上运行SwiftLint自动更正

SwiftLint由好人@realm开发。 这是一个很棒的开源工具,用于在Swift中建立和执行正式的编码风格。 它在命令行上运行,但是也可以直接挂接到Xcode中。 它还具有“自动更正”功能,可扫过您的代码并自动修复最琐碎的违规行为(例如,冒号定位,双空格等)。 我创建了一个Git提交钩子,每次团队成员进行更改时,它都会执行此操作。 Shell脚本本身很简单。 只有提交中更改的文件将被自动更正。 为防止意外的文件更正,这些更改不会自动包含在当前更改集中。 您将有机会查看更正,并进行新的提交以完成这些更改,或修改先前的提交。 #!/bin/sh git diff –cached –name-only | grep .swift | while read filename; do /usr/local/bin/swiftlint autocorrect –path “$filename” done 将此Shell脚本安装在Git存储库的.git/hooks目录下。 确保将其命名为pre-commit (无文件扩展名)。 无论您使用哪种Git GUI工具,该提交钩子都应该可以正常工作,当然也可以使用命令行。 请注意,每个团队成员必须单独重复此安装。 没有办法自动分发git commit hooks。

具有ReactiveKit的iOS中的MVVM

使用ReactiveKit实现MVVM登录示例 如果您已经开发iOS已有一段时间了,那么您可能已经听说过MVC : Massive View Controller 。 这种现象可以从对视图控制器中的Web服务器的无辜调用开始,然后突然出现:一个庞大的ViewController ,它有成百上千行,大量的职责和测试的噩梦。 苹果的MVC有很多替代方案,例如MVP , MVVM和VIPER 。 在本文中,我决定尝试使用ReactiveKit进行MVVM方法。 观看Bohdan Orlov撰写的有关iOS体系结构模式的精彩文章。 为什么选择ReactiveKit ? 关于RxSwift和ReactiveCocoa的样本很多,但实际上ReactiveKit的样本很少。 我真的很喜欢它的前身SwiftBond,所以我决定尝试它的演变。 在本文中,我们将基于ReactiveKit和MVVM创建一个简单的Login示例。 我们将使用三个依赖项: ReactiveKit , ReactiveUIKit和AlamofireReactive 。 您可以在ReactiveKit Github上了解有关它们的更多信息。 MVVM反应性登录 让我们开始创建一个简单的ViewController的示例,其中包含两个文本字段(用户名和密码)和一个登录按钮。 将IBOutlet链接到ViewController之后,我们将创建一个新的ViewModel类。 此ViewModel将保存ViewController将观察的属性 ,以更新其视觉状态。 属性将可变状态包装到可以观察该状态的对象中。 每当状态改变时,就可以通知观察者。 — ReactiveKit 但是,让我们从更简单的事情开始。 让我们创建一个initializer ,它接收两个属性 (一个用于用户,一个用于密码)并开始观察更改: ReactiveUIKit已经具有UI元素的多个属性,例如`rText`,这使将变量绑定到动作变得非常容易。 看! 现在,在用户键入每个字符后,我们会收到通知! 让我们继续并使用此属性做一些更有用的事情。 如果在字段中未输入任何文本,则将它们组合在一起以禁用登录按钮,并在用户键入有效的用户/密码组合后将其启用: 太棒了! 通过组合来自用户和密码的新值,我们可以决定是否要启用或禁用登录按钮,只需设置属性并将其绑定在按钮上,UI就会自动更新! 测试我们的ViewModel也变得轻而易举 。 我们可以模拟用户和密码的属性 ,然后测试ViewModel行为,而无需处理IBOutlets和UIViewControllers 。 注意:Quick用于BDD测试。 调用我们的后端以验证数据 […]

创建ReactiveSwiftRealm-第1部分

如果您已经阅读了我的上一篇文章,您会知道这正在发生。 我将分享有关如何创建ReactiveSwiftRealm软件包的整个过程,包括对Carthage和Cocoapods的支持。 在这第一篇文章中,我将解释如何将项目设置为准备好迦太基/ Cocoapods和子模块。 创建Xcode项目 首先,我将创建该程序包所在的Xcode项目。 选择文件->新建->项目 从iOS标签中的Framework&Library选项中选择“ Cocoa Touch Library” 单击“下一步”并填写选项。 选中“包含单元测试”选项(因为我们要测试软件包) 选择保存项目的位置 取消选中“在My Mac上创建Git存储库”,因为我们将手动对其进行设置 单击创建,Xcode将打开项目 现在转到File-> Save As Workspace,并使用相同的名称将其保存在Xcode项目所在的目录中。 我们正在使用工作区,以便将支持依赖项作为子模块。 它们必须在工作区中,以便Xcode对其进行编译。 使用文件->关闭项目关闭Xcode项目 从finder或使用File-> Open打开Workspace文件 单击Xco​​de左上方的方案,然后选择“管理方案”。 我们应该将我们的方案标记为“共享”,以便可以用迦太基构建它 时间到了 现在我们必须设置我们的git repo。 在开始之前,请导航到终端中保存项目的目录,然后: 运行git init初始化一个空的存储库。 创建一个.gitignore文件,以便git不会跟踪我们不想跟踪的依赖文件。 您可以将以下示例标准用于Swift项目: OS X搜寻器 .DS_Store 构建生成 建立/ 衍生数据 各种设定 * .pbxuser !default.pbxuser * .mode1v3 !default.mode1v3 * .mode2v3 !default.mode2v3 * .perspectivev3 !default.perspectivev3 […]

如何选择堆栈,第3部分:iOS

如果您正在从事编码工作,那么第一个问题可能是“哪种语言是最好的?”,然后是“我如何学得足够好,以至于有人雇用我?” 第一个问题的答案通常是主观的,因为首先要学习的“最佳”语言(您可能会在整个职业生涯中学到很多)取决于您的目标和偏好。 由于后端语言的高薪或受欢迎程度,它似乎是最好的学习语言,但是如果您主要想在应用程序界面上工作,则后端语言可能不是正确的选择。 在本博客系列中,我们将共享高级Code 401系列中学习每种语言的收益,薪水,职业潜力和资源。 今天,让我们谈谈iOS开发人员的两种语言Swift和Objective-C。 Swift和Objective-C:构建移动应用 就像Python和JavaScript一样,iOS开发不仅涉及学习编程语言的语法。 iOS开发人员必须了解信息体系结构,面向对象的程序设计,Xcode,以及如何针对各种设备和配置(iPad与iPhone,横向与纵向布局等)构建和调整应用程序。 此外,移动开发人员在与新兴技术合作方面处于领先地位,不仅为智能手机和平板电脑构建应用程序,而且还为智能手表,智能电视,物联网以及虚拟现实和增强现实构建应用程序。 企业由移动应用提供动力 就像网站和社交媒体一样,移动应用程序在企业期望拥有的,面向客户的访问点列表中也很出色。 无论他们只专注于移动设备(例如SnapChat或Instagram),还是需要支持其主要业务的移动应用程序(例如银行,百货公司,社交媒体平台等),企业都意识到,如果他们想在他们所处的地区吸引客户随时随地-他们需要一个移动应用程序。 应用程序也可以帮助业务流程,并且公司正在使用移动软件来改善内部功能,从缩短员工培训时间到改善团队沟通。 随着向更多移动设备的转移(去年,美国68%的成年人拥有智能手机,自2011年以来几乎翻了一番),对移动应用程序开发人员的需求只会增加。 iOS开发人员的工作 与任何技能一样,职称和职业方向取决于偏好,专业,行业时间和其他因素。 一些较常见的工作是: iOS开发人员 iOS软件工程师 移动开发者 iOS应用程式开发人员 iOS移动开发工程师 Mac OS / iOS开发人员 iOS工程师 移动应用开发商 iOS开发人员的薪水 就像职务一样,iOS开发人员的薪水取决于几个因素。 根据Indeed的说法,薪水一直在上涨,美国iOS开发人员的平均薪水为101,000美元。 如何学习Objective-C和Swift 如果您是一位有抱负的iOS开发人员,那么了解Swift和Objective-C都是很重要的。 了解这两者将使您在行业中更具市场价值,并使您对iOS开发生态系统有更好的了解。 以下是我们为想要扩展到iOS开发的程序员推荐的最佳资源。 图书 iOS编程:大书呆子牧场指南 Objective-C编程:大书呆子牧场指南 功能迅捷 Swift编程指南 线上 雷·温德利希(Ray Wenderlich)的博客 Apple的Swift开发人员“入门”指南 Tuts + Lynda.com 班级 Code Fellows中历史最悠久的课程之一是iOS中的Code 401:Advanced Software Development。 如果您正在寻找一条直接,快速的途径来更新您的编程技能集或扩展为一种新语言,那么我们为期10周的移动开发课程将教授移动开发人员应了解的最佳做法和标准,例如新版本中的更改。版本的Swift以及如何使用现有代码库。 […]