Tag: wwdc

WWDC18:运行中的Xcode 10

最初在这里发布在XCBlog上 苹果的世界开发者大会(WWDC)2018已于本周开始。 按照承诺,随着WWDC内容的宣布,我将撰写一系列博客文章。 关于iOS12,watchOS5等新软件的公告很多。但是,还有另一场平台联盟国会议,这是致力于Apple平台开发人员的主题演讲。 Apple宣布了Xcode 10,其中包含了许多新功能,并且在会议中进行了演示。 在本文中,我们将使用macOS高级版Sierra快速探索Xcode 10的新功能,因为macOS Mojave尚未公开,因此我们不会看到Xcode的暗模式。 Xcode 10具有许多功能,这些功能已在WWDC的平台状态国会议上宣布。 在这篇文章中,我们将仅介绍以下功能。 并行测试:XCTest和XCUITest XCODEBUILD 代码段 方案编辑 多行编辑 新建系统 源代码控制 我们将简要研究Xcode的那些功能。 并行测试:XCTest和XCUITest 苹果实际上在去年WWDC17上宣布了并行测试功能,我们可以在其中指定多个目标,并且测试将相应地在不同的模拟器或设备上触发。 您可以在这里阅读有关去年宣布的XCTest功能的更多信息。 但是,今年它通过创建仿真器的克隆扩展到在单个仿真器中并行化测试套件。 Xcode在后台创建了不同的运行程序流程,每个流程都分配了特定的测试。 这大大减少了测试执行。 我们可以通过更新方案来启用并行测试,并且在“测试”操作中,可以针对测试包选择“选项”以选择并行化选项。 我们也可以选择位置。 还有其他一些选项可以使测试随机化,并可以在方案中添加新测试。 让我们首先关注并行化。 选中此复选框后,我们都准备针对该方案并行执行测试。 默认情况下,只分配了两个运行器进程,但是从命令行运行时,我们可以增加数量。 在Xcode测试报告中,哪个模拟器克隆运行哪些测试。 测试报告分组在一起。 实际上,这是对测试执行速度的极大改进。 使用并行测试技术,我们可以大大加快单元测试和UI测试的速度。 使用这种技术,我们仍然应该能够在多个模拟器目标位置执行测试。 并行运行XCTest的各种选项已添加到xcodebuild工具中,我们将在本文的以下部分中进行探讨。 XCODEBUILD Xcode 10附带了各种命令行工具,这些工具可以帮助从命令行或脚本中实现各种功能。 这是为各种目的添加到xcodebuild中的一些新选项。 平行测试 可以使用xcodebuild工具从命令行运行XCTest。 使用Xcode 10,我们还有其他一些选项可以启用并行测试,这些是 -maximum-concurrent-test-device-destinations NUMBER:要同时测试的最大设备目标数 -maximum-concurrent-test-simulator-destinations NUMBER:要同时测试的模拟器目标的最大数量 -parallel-testing-enabled YES | NO:覆盖方案中的每个目标设置 -parallel-testing-worker-count […]

WWDC18:在Xcode 10中优化Swift构建时间的现代技巧

使用Xcode 10,在构建Swift项目时,性能和开发人员的工作效率有了很大的提高。 构建时间很无聊,如果构建时间更长,可能会分散开发人员的注意力,Apple付出了一些努力来优化构建时间,尤其是对于Swift语言。 基本上,构建时间取决于所使用的代码行,代码行数,依赖性和机器配置。 Xcode 10和Swift编译器今年都宣布了各种新功能,从而使Swift构建比以往更快。 这个GitHub存储库中已经涵盖了各种技巧,但是我们将介绍Xcode 10和Swift 4.2中的新增内容,这些内容将有助于我们更快地构建Swift。 1.了解Xcode的构建过程 构建过程是使用一些本机命令行工具(例如swiftc,clang,ld,actool,ibtool等)在后台执行的任务的集合。它涉及编译和链接源代码,复制资源(如资产,StoryBoards,代码)使用构建脚本等进行签名和自定义。 但是,Xcode的构建过程可以有效并以正确的顺序自动执行这些任务,因此我们可以加快构建过程。 如果可能,可以并行完成Swift源文件的编译,以便链接器可以一次执行所有这些任务,以准备应用程序的可执行文件。 Xcode构建系统负责分析依赖关系并确定可以并行运行的任务。 理解增量构建的概念也很重要,这样,如果不进行更改,就不需要构建所有东西。 通过观看此WWDC会话,您将了解有关Xcode构建过程如何在后台工作的更多信息。 为了加快构建过程,我们应该通过识别和优化应用程序中的依赖关系来帮助构建系统更快地完成其工作。 这就是为什么了解Xcode构建过程如何在后台运行很重要的原因。 2.使用新的构建系统 Apple在Xcode 9中启动了新的构建系统,但默认情况下未激活它。 但是,对于Xcode 10,默认情况下会激活新的构建设置,并从Xcode文件->项目/工作区设置中启用 查看有关Xcode新构建系统的先前博客文章,以获取有关构建系统的详细信息。 如果要使用xcodebuild从命令行构建iOS项目,那么我们必须传递附加参数-UseNewBuildSystem = YES还将强制使用新的构建系统。 新的构建系统称为xcbuild。 苹果xcbuild的二进制文件位于路径中 /Applications/Xcode.app/Contents/SharedFrameworks/XCBuild.framework/Versions/A/Support/xcbuild 3.并行化Swift构建 Xcode项目由多个目标组成,一个目标可能依赖于另一个目标来构建。 Xcode目标指定了要构建的产品,例如,对于主应用程序和单元或UI测试,我们可能有不同的目标。 当一个目标依赖于要构建的另一个目标时,它会创建依赖关系,例如对iOS应用程序的单元测试,我们首先需要构建主应用程序,然后才能构建单元测试目标以执行单元测试。 在Xcode构建阶段中,我们可以使用Target Dependencies显式指定目标依赖关系,并隐式使用Link Binary with Libraries 串行构建目标将需要时间,并且可能不利于利用系统资源。 如果可能的话,建立目标真是太棒了。 借助Xcode 10,我们可以并行化构建并分析引擎盖下的依赖关系,从而显着增加了构建时间。 我们可以通过编辑Xcode方案并在方案的构建动作中检查并行构建来启用并行构建。 确保同时检查了Parallelize Build和Find Implicit Dependencies,以确保我们从Xcode中获得最佳性能。 并行化构建将确保在可能的情况下并行运行构建,并且Find Implicit依赖项将检查项目内部的所有依赖项,通常在“将二进制文件与库链接”构建阶段。 Xcode 10还引入了“并行目标构建过程”的功能,这意味着从属目标可以尽快开始编译而无需首先等待完成,但是它必须等待第一个目标的“运行脚本”阶段。 4.改善运行脚本阶段 在Xcode的构建阶段,我们可以添加自定义运行脚本来根据我们自己的项目需求进行构建过程。 很好的例子是Carthage,如果您使用Carthage进行依赖项管理,那么您必须经历过运行脚本阶段。 […]

WWDC 2016聚焦:iOS 10国际化和本地化

将您的应用程序翻译成多种语言并进行国际兼容性设计对于将其应用范围扩大到全球市场至关重要。 许多iOS开发人员可能已经熟悉用于本地化的NSLocalizedString和可本地化的情节提要,但是iOS 10提供了新的选项来使国际化和本地化过程更加顺畅。 让我们看一下iOS 10可用的一些更新,这些更新对开发人员会有所帮助。 新键盘 有一个新的数字键盘,支持本地数字。 有时,您只需要ASCII数字,例如信用卡号,电话号码和IP地址。 在这些情况下,应使用UIKeyboardTypeASCIICapableNumberPad作为键盘类型。 分析仪设置 有一个名为“ Missing Localizability”的新静态分析器设置。如果将其打开,则不必担心忘记使用NSLocalizedString 。 编译器会警告您。 如果您省略了注释,则称为“缺少本地化上下文注释”的其他设置甚至可以警告您。 格式化程序 尽可能使用格式化程序,以避免其他语言的UI看起来很奇怪。 例如,在中国,通常会在时间之后加上“ am”或“ pm”。 在那上面显示过。 欧洲大陆大部分地区都使用24小时制。 格式化程序会在所有情况下显示适当的变体。 有一个新的NSPersonNameComponentsFormatter ,可以为它提供一个全名的字符串,它将解析其组成部分,例如给定名称,中间名和姓氏。 某些语言和地区将姓氏放在首位,然后是给定名称,而其他语言则相反。 格式化程序可以很好地处理此问题。 可以使用称为NSMeasurementFormatter的新度量格式器在不同单位之间转换值,例如升和加仑。 千克,磅和盎司; 英里和公里。 它根据您的语言环境来执行此操作,或者您可以指定一个语言环境。 更多资源 App Store使应用程序可在150多个国家/地区使用。 有关为不同受众群体准备应用的更多信息,请查看: 国际化和本地化指南 国际化最佳实践 国际用户界面中的新增功能 我要感谢MartínAdoue和 Rebekah Wolf 的投入。

Xcode 9的新增功能:值得期待的5大功能。

苹果的WWDC 2017正在进行中,对于开发人员我们已经有了一些好消息! 在平台状态联盟主题演讲中,我最喜欢的是围绕Xcode进行的改进。 因此,我决定将自己最希望在Xcode 9中玩的东西排在前5位。请注意,新的Xcode编辑器已在Swift中从头开始完全重写,这使得它在许多方面都快得多🎉 1.在Swift中重构 终于啊! 我一直期待着这件事,因为Swift一直存在,他们终于交付了! Cmd + Shift + F消失了,您错过了一些变量重命名,或者不小心修改了一个不相关的变量。 剪切+粘贴+修改以提取方法的方法已经一去不复返了。 我们终于可以使用这些了! 尽管Xcode像今天提供JetBrains一样提供高级重构工具还有很长的路要走,但它提供了最常见的工具,例如添加代码段,提取方法和变量以及与Swift,Objective-C甚至Storyboard文件一起使用的全局重命名。 我们必须从某个地方开始吗? 2.更聪明地修复its Xcode的另一个不错的改进是更智能的“修复它”。 还记得实现UICollectionViewDataSource , CMD +单击它,然后从中复制粘贴所需方法的时间吗? 好吧,有了新的Xcode,您只需单击即可获得所有这些! 除了添加缺少的协议要求之外,还有“修复它”的功能,可以为抽象方法添加缺少的替代,添加缺少的实现存根,围绕仅在特定iOS版本中可用的API添加if else语句等。 从长远来看,这可以极大地提高您的开发速度。 3.模拟器…s! 🔄 🎉🎉! 现在,我们可以启动多个模拟器,无论是iPhone还是iPad! 我只是尝试了一下,它看起来很棒。 另外,它们是完全可调整大小的。 4.无线调试📲 是的,您没看错! 为您的iOS应用程序进行无线测试和调试! 不再需要使用该电缆。 我们长久了 等待这一天。 5.源代码控制📑 最后但并非最不重要的一点是,Apple在Xcode内添加了一个很棒的Source Control Navigator。 它显示您的工作副本,分支的详细信息,文件更改等。您还可以执行诸如创建分支之类的操作。 作为Atom和VSCode的用户,我很高兴Xcode决定采取类似的方法将某种形式的Source Control集成到编辑器中。 另一个很酷的事情是与Github的合作! 它已完全集成到Xcode中,您现在可以克隆存储库,签出自述文件,添加星标等等。 奖金 作为奖励,我想添加两件事: Xcode现在有一个MarkDown编辑器,很好! 还记得将文件从一个组移动到另一个组时非常烦人的组与文件夹问题吗? 好了,有了新的Xcode,它终于解决了! 您不必再担心🎉

WWDC17 —回顾展

我们的两名开发人员Tim和Niall参加了抽奖活动,并获得了今年WWDC,苹果全球开发人员大会的门票。 Michael是他们不幸的iOS同事之一,就他们的WWDC经验以及iOS 11和Xcode的新功能采访了他们。 另一个不太幸运的同事杰西卡(Jessica)也加入了。 Niall,这是您的第一个WWDC,那么为什么不从给我们您对WWDC的总体印象开始呢? Niall(ND):很容易陷入炒作之中,我认为它会逐渐消失,但是这个地方的能量和对它感到非常兴奋的人的种类使你继续前进。 我非常喜欢它,整个活动,演讲者和场地。 今年是在圣何塞,是您第一次来圣何塞吗? ND:是的,我感到有点遗憾,因为它不在旧金山,因为我认为这是一个比圣何塞更有趣的地方,但是无论如何,您实际上并没有在场地外获得大量的时间-差不多全开。 蒂姆,这也是您去年第二次参加WWDC,请问该如何比较? 蒂姆(TC):我更喜欢圣何塞的场地。 一切都在一个楼层上,虽然紧凑但很大。 迈克尔(MB):那没有道理…… ND:感觉就像所有的东西都紧靠在一起,您真的不需要走太远就可以到达某个地方,但是无论何时到达任何地方,都有大量的空间-大厅很大。 “……您觉得很久以前就应该在那里的东西终于来了。” 就开发人员工具而言,最大的收获是什么? ND:我认为对我来说最大的改变是Xcode 9的一些更改,特别是新的重构工具,以及引入的一些生活质量更改,您认为应该有很长的时间时间前终于来了。 运行多个模拟器,进行无线调试对于Apple TV的开发将特别方便,并且还有其他一些优势,例如大大改进了代码折叠功能。 TC: iPad的新iOS 11功能给我留下了深刻的印象。 现在基本上在计算机上已经完整。 应用之间的拖放,改进了分屏显示。 MB:您认为这会让您想编写更多iPad应用程序吗? TC:是的,我真的很想尝试这种拖放式的东西,它在iPhone上的应用程序之间不起作用。 在第一个Beta中,我已经能够使其在测试应用程序中运行,但是他们在第二个Beta中禁用了它。 “我认为对于那些不住在命令行中的人来说,他们可能不需要太久的其他git工具,例如Tower或SourceTree。” 我和杰西卡都没参加会议,但是我们在家里一起玩,所以对您来说,杰西卡对您来说最大的好处是什么? 杰西卡(JC):我也非常喜欢重构方面的改进,这是我到目前为止一直在使用的主要内容。 显然Xcode更好,但是我在Android Studio中做了一些基本的事情,而这些东西在Xcode中是做不到的,对于Swift,您甚至不能做基本的重命名。 这是很简单的东西,但是却有很大的不同。 MB:到目前为止,我最喜欢的是Xcode 9中的新git功能。能够轻松浏览所有分支和标签,查看所有提交以及在完整的并排编辑器中查看差异是一个很大的事情。改善。 我认为对于不在命令行中的人们来说,他们可能不需要太久的其他git工具(如Tower或SourceTree)了。 TC:尽管如此,我认为它过于关注GitHub了-如果它更通用,那就更好了。 MB:是的,虽然我提到的东西可以在我们所有的git仓库中使用,但是我们在大多数项目中都没有使用Github,但是当然还有很多其他功能仅适用于GitHub,我想知道他们是否会为BitBucket添加类似的东西在未来的几年。 JC:所以您一直在使用Xcode中的git? MB:是的,实际上它是最棒的功能,我认为是后台获取,并突出显示远程文件更改的位置。 不必考虑这一点,只需在文件旁边看到一个小图标就可以了。 您认为Xcode或其他开发工具中还有什么值得一提的吗? ND:在大型项目中,Xcode 9的速度要快得多,搜索的速度要快得多。 TC:编辑器中的滚动确实得到了改善,滚动更大的文件的速度更快。 MB:还有一件事,我没有看到,但是您提到了Tim,我觉得听起来很棒,它是快照调试状态,您能告诉我们一些吗? TC:有时候您会发现一个错误,但是您不是一个要修复的错误,因此您可以暂停执行,拍摄快照并将其发送给另一位开发人员。 他们可以导入并运行它,然后从该状态继续。 不幸的是,这仅适用于SceneKit调试,但是仍然很酷。 我去过的每个WWDC,最大的欢呼之一就是他们一劳永逸地解决了我们所有的代码签名麻烦,而您提到他们今年再次做到了Niall? ND:是的,他们已经取消了从Xcode吊销发行证书的功能,因此希望这将减少意外吊销。 他们还更改了代码首选项中的“帐户”标签。 如果您在那里管理证书,它将为您提供各种证书的状态,并指出特定问题,例如证书是否在钥匙串中或是否已被吊销等。 MB:这次没有“修复问题”按钮了吗? […]

WWDC18:代码覆盖率,XCTest和XCUITest的新增功能

在WWDC18上,有一个有关“测试中的新增功能”的会议,描述了代码覆盖率,XCTest和XCUITests中的新功能。 它由Honzaand Ethan提出。 本届会议包括以下内容 xccov的代码覆盖率 从方案中选择测试 随机检验 并行测试 并行测试技巧 幸运的是,我已经在以前的博客文章中介绍了本次演讲中介绍的大多数内容。 由于xccov已随Xcode 9.3一起启动,因此我在个人博客和Medium上都写了一篇详细的博客文章,内容涉及xccov的所有功能。 Xcode 10宣布了Xcode 10的并行测试功能,我已经在行动博客文章中介绍了Xcode 10中的大多数并行测试,该文章也发表在了Medium上。 您随时可以随时在会话中观看实时演示。 但是,我们将简要介绍本届会议上提到的功能。 代码覆盖率 苹果已经发布了带有Xcode 9.3的新命令行工具xccov,用于检查Xcode代码覆盖率报告的内容。 我们可以通过编辑方案并在“测试”操作中选中“代码覆盖率”框来明确启用该方案的代码覆盖率。 使用代码覆盖率数据运行测试后,Xcode会将代码覆盖率报告生成到默认的派生数据目录中,该目录位于〜/ Library / Developer / Xcode / DerivedData中,您将在Logs / Test目录中看到生成的代码覆盖率报告。 我们将看到扩展名为.xccovreport和.xccovarchive的代码。 在Logs / Test目录中,有覆盖率报告(扩展名为.xccovreport)和覆盖率存档(扩展名为.xccovarchive)。 按照此实用程序的手册页,“覆盖率报告包含每个目标,源文件以及具有覆盖率信息的功能/方法的行覆盖率百分比。 Coverage存档包含报告中每个文件的原始执行计数”。 目前,我们可以使用xccov实现以下目的 从终端查看代码覆盖率报告 从代码覆盖率报告中吐出JSON。 列出所有已生成代码覆盖率的文件 查看一个特定文件的代码覆盖率报告。 观看如何查看实际的代码覆盖率。 这减轻了使用第三方工具以美观的格式显示Xcode代码覆盖率报告的麻烦。 我们也可以跳过不需要的目标的代码覆盖范围。 XCTest方案选项 使用Xcode 10,我们可以从方案中选择特定的测试,将测试随机化并并行执行测试。 我们可以通过更新方案来启用并行测试,并且在“测试”操作中,可以针对测试包选择“选项”以选择并行化选项。 我们也可以选择位置。 通过创建仿真器的克隆,测试可以扩展到并行化单个仿真器中的测试套件。 Xcode在后台创建了不同的运行程序流程,每个流程都分配了特定的测试。 可以使用xcodebuild工具从命令行运行XCTest。 使用Xcode […]

Swift 4的可编码协议

在WWDC 2017上,Apple引入了一种特殊的新方法来处理应用程序开发中的重复任务:JSON处理。 到目前为止,依靠第三方库(即SwiftyJSON,JSONShootout)来完成工作是非常普遍的,但是,随着Apple新的Codable协议的引入,许多情况本来可以很好地处理。 新的Codable协议实际上是另外两个协议的Encodable Decodable : Encodable & Decodable 。 这意味着,如果您认为合理的话,您也可以决定将两者分开实施。 让我们从一个示例开始: 假设您正在从咖啡店下载菜单。 您的Coffee模型看起来像这样。 通过简单地实现上述协议,您已经免费获得了一些好东西。 通过实例化JSONEncoder您可以轻松地将咖啡对象转换为Data. 由此,如果您从中初始化一个String ,您已经可以看到模型的JSON表示形式。 你有它。 现在,对于解码器,我们将使用编码器上的outputFormatting属性,以演示Swift 4的另一个不错的小功能,称为多行字符串文字。 通过将编码器的outputFormatting定义为.prettyPrinted我们可以在控制台上很好地呈现JSON,这对于处理更复杂的对象特别有用。 现在,要从JSON数据实例化Coffee,我们将复制打印对象并粘贴到新的字符串变量中,如下所示: 请注意,通过使用此新的“多行字符串”功能,我们能够以这样的方式表示字符串,并带有换行符,而不必转义双引号。 您只需要小心正确地排列顶部和底部的三重引号,一切就可以正常工作。 从那里开始反向过程,将字符串转换为输入数据,然后使用JSONDecoder解析代码并从中构建新的Coffee实例。 太酷了吧?

字符串(不是理论上的)更新

考虑到我无法购买Apple提倡的许多新配件,我将讨论让Swift 4感到兴奋的一些更新。 如果您有Apple开发人员帐户,请随时下载Xcode的新测试版,这将使您可以使用Swift 4。 字串: 没有人喜欢被串在一起。 如果您从一开始就善于沟通,要么是朝着某个方向前进,要么是建立一种无拘无束的情境。 在当今的现代约会中,似乎我们把Strings做错了,并最终试图纠正这一点。 迭代: 我最终可以访问字符串对象的每个字符,而无需访问characters方法! 数数: 没有什么比自动计数您的字符计数要好了。 我终于可以再次从Strings中受益,进行收集处理。 您是否曾经使用过一个字符串并且只想删除第一个字母? 好吧,现在您可以放下它,就像它很热一样。 相反: 此外,能够访问您的字符串字符并立即反转它们是改变游戏规则的人。 在解决与字符串相关的问题时,我常常不得不依靠能够实现这些方法所能实现的扩展。 这更加直观,将字符串作为序列/集合返回到一个值得尊重的地方。

WWDC18:ARKit2与ARKit1.5 — 2D跟踪性能比较

去年,最有趣的技术趋势之一就是增强现实。 包括苹果在内的所有大公司都做了与之相关的事情。 他们花了大量的资源和时间来解决这个问题,正如蒂姆·库克(Tim Cook)所说的: “……增强现实可能是下一件大事……” 如果说2017年是引入一个完整的可处理AR框架的里程碑年,那么2018年无疑是ARKit2引入后该技术成熟的一年。 为了可用性,可维护性和简单性,许多事情已经发生了变化:所有可能有助于将技术大规模传播的事物。 本文的其余部分是关于我对新的ARKit框架的个人经验,重点介绍了iOS11和iOS12之间的改进和区别。 就像任何优秀的开发人员文章一样,我们需要进行案例研究以更好地解释该主题。 所以,就在这里。 我们将创建一个简单的应用程序,该应用程序使用增强现实技术在指出名片时向您显示特别优惠和其他信息。 (可选)应用程序将从remte JSON加载所需的信息,然后在需要时向用户显示相应的视觉增强功能。 首先是打开Xcode并创建一个填充所有相关内容的新AR项目: 默认情况下,Xcode创建一个供使用的起始场景,而该场景对于本文中的内容完全没有用。 删除它并打开为我们自动创建的ViewController.swift文件。 由于我们不再关心自动生成的场景,因此将修改viewDidLoad方法以反映此行为。 我们所需要做的就是用正确的委托实例以及一些用于调试目的的有趣的东西来指示sceneView出口。 覆盖func viewDidLoad(){ super.viewDidLoad() sceneView.delegate =自我 sceneView.showsStatistics = true sceneView.autoenablesDefaultLighting = true sceneView.automaticallyUpdatesLighting = true } ARSCNView类是任何AR应用程序的入口点。 它将虚拟内容与通过摄像头设备看到的真实单词混合在一起。 它还负责许多其他非常有趣的东西,例如将触摸映射到现实世界坐标。 ARSCNView依赖于委托方法。 通过实现其ARSCNViewDelegate ,我们可以将虚拟内容添加到ARKit自动检测到的任何真实对象中。 您可能会猜到ARKit是负责增强现实的框架。 为了正常工作,应该首先正确初始化它。 让我们添加一个方法来做到这一点: 右键单击左侧,创建一个新的AR资源组: 将其命名为Photos并添加一些卡片。 这里最重要的是为每张卡添加相对估计的尺寸。 这很重要,因为3d引擎需要此信息来正确估计3d世界中的对象。 您可能会注意到其中一张卡具有警告信号。 让我们点击它: Xcode警告我们,卡上的直方图和对比度对于图像识别而言并非最佳。 让我们暂时忽略它。 我们的玩具应用程序应该能够使用锚点来跟踪2D图像并将其映射到现实世界中的对象。 ARAnchor是负责现实位置和方向的类,用于在AR场景中映射检测到的对象。 除其他有趣的属性外,它还包含一个matrix_float4x4,用于定义锚点在世界坐标系中的旋转,平移和缩放。 打开var转换:matrix_float4x4 {get} […]

iOS中面向协议的Segues

早在2015年,WWDC上就有一个很棒的会议,叫做Swift in Practice。 还有一个示例,说明了如何使用segues面向协议的方式。 因此,我决定将此示例更新为Swift的最新版本,并向您展示。 首先,您应该知道示例应用程序只是一个名为“ Master-Detail”的Xcode模板项目,并进行了一些重构以提高可读性。 完整的源代码可在GitHub上找到。 处理串流的标准方法 当您想使用segues时,通常要做的是重写prepare(for:sender:)方法: 因此,您最终得到了一个不错的segue语法: 结论 这种方法使您的代码更加优雅和类型安全。 另外,如果不处理新的情况,编译器在添加新的序列时也会给出错误。 希望您喜欢本教程。 别忘了拍拍😄。 并在Twitter和Instagram上关注我。