Tag: 移动

iOS Webkit,Swift 4和Javascript

将Web嵌入本机应用程序是一种将应用程序快速添加内容的常用方法。 它不仅可以提供支持访问,联系表格,还可以提供用于引导缺少功能的更复杂方法。 Webkit框架允许您将其与Javascript结合使用,以改善用户体验。 从历史上看,iOS允许使用将Web嵌入到UIWebView中。 作为第一种方法,它很方便,它自己处理cookie,但在JavaScript方面却非常有限,主要是因为缺少核心引擎。 Webkit出现了,该框架允许开发人员使用相同的Javascript引擎在其移动应用程序中为Safari提供动力。 为了使用某些Javascript内容测试我们的iOS应用,我将使用一个HTML文件,其中包含非常基本的形式和两个javascript函数:*登录操作,将数据形式转发到本机应用*一种更改标题的方法这页纸 它可能看起来像下面的人 function sendLoginAction() { try { webkit.messageHandlers.loginAction.postMessage( document.getElementById(“email”).value + ” ” + document.getElementById(“password”).value ); } catch(err) { console.log(‘The native context does not exist yet’); } } function mobileHeader() { document.querySelector(‘h1’).innerHTML = “WKWebView Mobile”; } WKWebView可以使用自定义配置进行初始化,包括使用的用户代理,Web视图要使用的数据存储以及用户内容控制器,以最终与Web视图本身关联。 这是我们用来从iOS向Java脚本发送呼叫的方法。 首先,我们需要创建此用户内容控制器并创建我们要处理的用户脚本。 let contentController = WKUserContentController() let userScript = WKUserScript( source: “mobileHeader()”, injectionTime: […]

营销人员应该问自己关于iOS 12的7个问题

市区飞艇的Alyssa Meritt和Meghan Suslak 自9月份推出以来, Apple的iOS 12在控制品牌如何与他们进行沟通方面为单个用户提供了更多功能和选项。 最大的变化之一是, 通知中心将成为Apple用户生活中最重要的收件箱。 分组通知 :来自品牌应用程序的通知将堆叠显示在一个组中,除非它们包含线程ID,将特定通知(例如体育比赛或旅行消息)分组在一起。 锁定屏幕通知管理 :iOS 12使在Notification Center中更轻松地管理通知设置(可能选择退出)。 “关闭”通知确认提示将深度链接到您应用的首选项中心。 安静通知与显眼通知 :显眼通知会点亮您的锁定屏幕,其中可能包括声音或振动。 安静的通知将直接传递到通知中心,而无需任何其他警报元素。 临时授权 :这是iOS 12中的新授权状态。如果某个应用启用了临时授权,则用户将被临时选择加入,并将接收直接发送到通知中心的安静通知。 (已经选择加入或退出通知的用户不会受到影响。) 对于营销人员而言,这增加了发送具有持续价值的目标内容的准备。 对用户的更多控制意味着客户有更多机会关闭无法满足其需求的品牌的通信。 为了防止断开连接并充分利用新更新,每个营销人员都应该向自己询问有关iOS 12的七个重要问题。当然,这些问题还附带七个非常有用的答案。 根据您要发送的通知的内容,将通知分组是一个不错的选择。 在一个地方允许访问一组通知会非常方便。 例如,体育赛事的当天消息,突发新闻和行进日通知可以被认为非常及时并且对客户有用。 如果应用程序发送不同类型的通知(教育,交易和促销),它们也可能是一个很好的工具。 通过这些特定类别将通知分组-而不是通过应用程序将它们全部分组-可使读者更轻松地查看和参与他们最关心的内容。 分组通知易于在iOS 12中使用,Urban Airship使得更容易开始使用自定义分组发送通知。 线程ID是一个简单的字段,用于确定通知的分组。 该ID与消息有效负载一起发送,因此您可以即时选择要使用的线程ID(以及如何对通知进行分组),而无需进行开发工作。 随着通知管理的更改以及用户对通知显示方式的增强控制,必须确保用户了解选择推送通知如何使他们受益。 如果还没有,请明确说明应用程序消息传递的价值主张,并确保您始终如一地传递消息。 通过应用内自动化和消息中心,可以对用户进行安静通知和重要通知的教育,使任何品牌都可以创建无缝的入职体验。 可以先在应用商店说明中下载应用,再在应用入门材料中完成此操作,并且-对于那些下载了该应用但尚未选择接收推送通知的用户-带有应用内消息。 借助In-App Automation,营销人员可以通过让他们知道他们可以从该应用程序中期望什么类型的通知,来创建带有自定义内容的消息,以针对未选择推送通知的用户。 两个词:引人注目的信息。 随着对授权的新更改以及用于安静或突出显示通知的选项,每条消息都变得更加重要。 营销人员可以采取多种措施使他们的通知更具吸引力,包括: 建立何时和为何发送每条消息的管理策略。 使用表情符号或丰富的通知还可以帮助在通知中心内吸引用户的注意。 确保消息尽可能相关或针对用户。 iOS 12从“管理通知”和“临时授权”提示链接到您的应用程序的首选项中心。 首选项中心为可能想要突发新闻而不是体育内容的用户提供了更多控制权。 交易性的,但不是促销性的。 通过允许用户提供他们的首选项,您可以阻止他们整体上退出您的通知。 首先,询问您将定期发送哪些内容。 例如,新闻或体育应用程序在喜好中心可能需要比乘车共享应用程序更多的通知类别。 […]

在Swift中以编程方式创建UITabBarController

收到了一些有关如何以编程方式创建UITabBarController的电子邮件,因此我想向所有人展示,因为除了在Storyboard上进行操作外,了解如何进行操作非常有益。 步骤1:删除Main.Storyboard😲 是的,有些新手会感到震惊。 步骤2:创建UITabBarController子类 文件->新建->文件->可可触摸类 步骤3:建立分页 打开您的UITabBarController,然后创建我们的标签。 非常简单,将其放入viewDidLoad() 步骤4:更新AppDelegate.swift 在AppDelegate中,我们必须设置我们的根视图控制器(我们的UITabBarController)。 步骤5:⌘+ R 运行您以编程方式创建的UITabBarController! 结束:一如既往的谢谢! 我感谢你们给我的爱,我喜欢帮助,所以任何遇到困难的人请不要犹豫。

iOS开发设置:Xcode

定制Xcode以获得更流畅体验的小技巧。 这篇文章是有关设置iOS开发环境的系列文章的一部分。 Xcode定制高度依赖于个人喜好,您可以做很多事情来改善自己的体验。 以下是一些我最喜欢的技巧来增强Xcode。 如果您不喜欢任何内置的Xcode主题,则可以轻松导入新主题。 这是一个很好的入门资源: hdoria / xcode主题 xcode-themes – Xcode的颜色主题 github.com 除了导入主题外,您还可以轻松自定义主题并保存或导出主题。 您可以在~/{user}/Library/Developer/Xcode/UserData/FontAndColorThemes/找到所有已安装的主题。 这是我的自定义主题在“首选项”窗格中的示例: 以及它的使用方式: 我在代码的任何地方都使用TODO:和FIXME:作为“自我注释”。 因为我不需要生产代码中的注释,所以我想在使用过关键字的位置添加警告,因此很明显,在进行生产之前,需要清理一些内容。 在Objective-C中,我们能够根据需要使用#warning标记显示警告,但是Swift没有等效选项。 相反,您需要添加一个Build Phase Run Script来为TODO:和FIXME:添加警告。 该脚本可在Swift和Objective-C工作区和测试中使用,但会忽略Pods。 最终看起来像这样: 隐藏Cocopod警告: 为确保您不会丢失新的TODO和FIXME警告,并且通常只需要为安装的Pod遍历大量警告,请确保禁止Podfile中的所有警告。 这应该在平台声明下的Podfile的顶部: #忽略来自所有Pod的所有警告 hibit_all_warnings! 我将直接链接到此,因为机器人Natasha的解释要好得多,但是要点是:如果添加异常断点并打印出参数,则每次应用崩溃时,崩溃的原因在控制台中打印出来。 它极大地改善了我的调试生活,并强烈建议所有人使用。 Xcode:一个奇怪的调试技巧,可以挽救您的生命 好的,希望您能告诉我这个标题让我玩得太开心了🙂无论如何,现在又恢复了定期安排… www.natashatherobot.com

成为中级iOS开发人员的提示

中级是标签。 对不同的人意味着不同的事情。 这篇文章非常主观,但是这些对我进步到我认为是中级iOS开发人员有帮助。 它还假设您已经对UIKit,协议和泛型之类的基本知识已经有了足够的了解,因此我不介绍这些内容。 学习高级iOS技术 从本质上讲,这是非常主观的,但是我建议您理解或至少意识到的事情是: 何时(以及如何)使用线程 CI和自动化工具(Fastlane,Jenkins,Travis或类似工具) 测试—单元测试,集成测试,UI测试,快照测试 如果可以访问,则App Store可以连接。 分发到TestFlight和App Store,用户和角色,证书和密钥都是好东西 帮助您遵循SOLID原则的抽象,例如Coordinator模式,这些概念将迫使您更好地构建代码。 通过实验找到最适合您的方法很重要 可访问性是大多数人会忽略的东西,因此这是与众不同的好方法。 当然,这对于您的用户也是正确的做法。 动态类型是您最容易使用的一种,也许是最广泛使用的一种。 配音和色盲设计也是不错的起点。 何时使用框架。 框架是一种非常强大的工具,可以为您节省时间和金钱,但是知道何时(并且更重要的是何时不使用)是一种技能 我敢肯定还有更多,但这些都是我想到的 这里有很多东西,所以更多的是要了解外面的事物并知道何时使用它们,而不是详细地详细了解每个事物。 这样,当有人要求您做某事时,您将知道最佳的做事方式,而无需立即知道如何做。 您将能够回答“是的,这是可能的”或“我知道这个伟大的工具”,而不是“我不确定,让我研究一下”。 最好对可以实现的目标有一个大概的了解。 将来也可能会节省您的时间。 我曾经一起破解过自己的电池记录实用程序,然后发现iOS内置了该实用程序。几乎与我不了解Swiftlint自动更正功能的时间一样糟糕。 当然,在尝试做任何事情之前进行大量研究都是不可行的,但是如果您对许多有用的技术有一个全面的了解,那么您将会知道从什么开始或推荐什么。 习惯于架构模式并知道何时使用它们 习惯一种做事方式然后陷入其中是很常见的。 也许对我们第一个可行的解决方案的联系过于紧密感到不自在或感到骄傲。 MVC没什么错,但是它是最容易被滥用的,因此赢得了良好的声誉,这也许是因为它是我们大多数人开始学习的地方。 我认为在编程中很明显,知道一种以上的做某事的方法是一项有用的技能。 这不仅是了解适合该工作的工具,而且还有助于加深您对该领域的了解,并让您了解为什么以这种方式做事。 如果您想探索建筑的各种首字母缩写,那么一个很好的起点是objc.io的《 App Architecture》一书(但是我希望他们能涵盖VIPER)。 您不必在实践中使用它们。 了解通用模式及其相关的词汇表将使您更轻松地阅读他人的代码,并使选择具有比您更喜欢的架构模式不同的新代码库更为顺畅。 与设计师合作时要自以为是 您的工作是制造最好的产品。 如果您与设计师合作,很容易挑战自己完全按照规范构建应用。 但是该规范可能不适合您所了解的业务需求。 或者它可能具有一些令人愉悦的新颖工作流程,其中标准的iOS应用程序模式就足够了(Snapchat重新设计后劲)。 与设计师一起提出这些问题是您的责任,以便您可以迭代它们并最终为用户构建更好的产品。 始终确保遵循《人机界面指南》,您的设计人员可能对此一无所知。 帮助别人 您可能会骗自己以为,由于您不是该领域的专家,因此您不应该教导其他人,但这不是真的。 您不需要了解某个主题的所有知识,只需要了解比与之交谈的人更多的知识即可。 如果有机会指导其他人,则承担该责任。 您将被迫清楚地解释一些事情,从而学到很多东西,巩固自己已经知道的知识。 但是请确保知道有多少帮助。 如果仅在它们前面键入所有代码并希望他们以后再理解,那将无济于事。 这是为正确答案提供指导的问题,当它们迷路而不会故意模糊时提供正确提示。 […]

使用UIMotionEffect创建视差效果

我敢肯定,您之前在设备主屏幕以及其他应用程序(如消息,天气和Facebook Paper)上已经看到了这种酷炫的效果。 iOS使用视差效果在主屏幕和设备其他区域上产生深度感。 在本教程中,我们将讨论运动效果,这是一种将设备的真实属性映射到应用程序界面并在设备水平和垂直倾斜时影响界面外观的简便方法。 什么是UIMotionEffect? UIMotionEffect是iOS 7中引入的抽象类,用于向用户界面添加逼真感。 将UIMotionEffect视为类似于CAAnimation的类,它们都分别为连接到它们的Views和Layers设置动画。 除了CAAnimation是时间的函数而UIMotionEffect是设备的运动的函数之外。 UIInterpolatingMotionEffect是负责将这些效果添加到视图中的类。 创建此类的新实例后,必须将适当的值分配给minimumRelativeValue和maximumRelativeValue属性。 当用户移动设备时,运动效果开始将系统返回的固定偏移值转换为指定的值范围。 建立您的Xcode专案 让我们开始使用Xcode创建一个新项目,然后选择Single View Application作为模板,并将其命名为Parallax Effect 。 我们将在这个项目中使用Swift作为编程语言,因此在创建项目时不要忘记选择它。 完成后,在Project Navigator中选择Main.storyboard ,然后将Image View对象从Object Library拖到View Controller。 下载此图像并将其图像更改为该图像 (或所需的任何图像)。 然后将其放在主视图的中心。 不要忘记将图像视图的“ 内容模式 ”设置为“ 居中 ” 。 使用Xcode 7.3,您必须为视图配置自动布局约束,以支持所有类型的iOS设备。 在最新版本的Xcode中,“自动布局”功能非常强大。 对于简单的约束,您只需单击“自动布局”菜单的“问题”选项,然后选择“添加缺少的约束” ,Xcode将自动为视图配置布局约束。 实现UIInterpolatingMotionEffect 现在,您已在情节提要板上创建了图像视图,是时候创建视差效果了。 打开ViewController.swift文件,并将以下代码添加到viewDidLoad 。 具有UIMotionEffect的视差效果 我见过许多开发人员使用keyPaths center.x和center.y实现此效果,我认为这不是通过在框外拉伸图像视图以告知视图控制器图像更大来解决此问题的正确方法。比显示的要多。 使用3D变换将是创建深度感知的正确方法,而无需那些黑客来实现我们的目标。 仅对垂直轴和水平轴使用关键路径layer.transform.translation.x和layer.transform.translation.y 。 创建完UIInterpolatingMotionEffect实例之后 ,正如我在本教程开始时所说的 ,我将为“垂直轴”和“水平轴”指定一个最小值和最大值。 最后,将运动效果添加到图像。 UIMotionEffectGroup类管理您希望同时应用的动作效果的集合,而不是单独添加它们。 而已! […]

拥有Fastlane的Easy CI:我们如何从运行测试到分发构建的所有iOS自动化

你好! 我是Aaptiv的iOS工程师Andrew Lection。 最近,我们为用户推出了一些很棒的新功能,例如Apple Watch应用程序和培训计划。 我们还长期认真地研究了“过去的工作方式”,以确保我们除了建立出色的新功能之外,还在构建有效,可持续的流程。 在本文中,我将与Ivan Lee(我们的首席测试工程师)合作,展示我们如何通过快速通道解决CI难题并分享经验教训,最佳实践和故障排除技巧。 这是我们团队开发过程中令人兴奋的新篇章,这仅仅是开始! 开发人员在本地运行单元测试。 PR的审阅者看不到单元测试的结果或其他代码质量信息。 工程师需要添加新的测试设备才能在Apple Developer Portal周围单击。 很多。 测试人员不知道新版本何时准备就绪-有时需要使用Diawi等外部工具来安装版本。 由于手动更新配置文件时出现问题,内部用户无法使用狗粮版本。 我们认为,我们的首要任务是专注于为iOS和Apple Watch应用程序实施持续集成(以及为最终为我们的Android应用程序实施CI奠定基础)。 由于以下原因,我们选择fastlane作为我们选择的CI工具: 这是一个开放源代码工具集,具有强大而出色的支持。 它非常灵活 ,可以让我们自动执行iOS特定任务,例如证书管理,自动增加内部版本号和设备配置。 它是便携式的,因此我们不会锁定供应商。 fastlane并未与特定的CI平台耦合,因此我们可以轻松地将fastlane实施迁移到其他SaaS提供商或我们自己的自托管CI。 您将需要整理一小部分(但很重要!)所需的东西。 这将使您的快速通道实施尽可能地顺畅无阻-而且还可以确保CI流程在很长一段时间内都可维护。 你需要: 电子邮件帐户-我们将创建一堆帐户(如果您也处理Android CI,那么还会更多!)。 一封不错的电子邮件(例如ios-ci@yourcompany.com)有助于使事情井井有条。 具有SSH密钥对的Github(或[INSERT SCM HERE])帐户-您的CI系统将需要此帐户。 如果要自动增加内部版本号,则SSH密钥对还将自动提交更改。 一个Apple Developer Admin帐户-fastlane Match为您处理所有杂乱的预配业务-您只需要为其提供一个帐户即可! 密码管理-完成后,您将拥有三个帐户,一个SSH密钥对和一个匹配存储库密码。 要为本地开发设置快速通道,您需要访问Apple Developer帐户和匹配存储库密码。 我们可以使用Lastpass Enterprise与团队安全地共享密码,尽管您也可以使用免费替代方案甚至安全的消息传递平台。 SaaS与设备实验室 fastlane正在开发以移动设备为重点的开源CI工具。 这是令人振奋的消息,我们很高兴在2018年末将fastlane.ci带出一堂。 同时,您需要在内部运行移动CI(使用Jenkins或Atlassian Bamboo)或与基于云的SaaS提供商(例如CircleCI,TravisCI或Gitlab)之间进行选择。 自托管 优点 超级灵活! 您可以控制移动CI实验室如何插入公司其余基础结构中-如果您在一个受到严格监管的行业中工作,这一点尤其重要。 您可以将所有(所有)构建集中在一个位置。 移动不一定非得是雪花! […]

使用Bitrise自动化您的iOS应用

使用Bitrise四个月后,我觉得我应该与社区分享此工具的强大功能。 快速介绍自动化并了解为什么我们确实需要自动化工具将是很好的。 让我们从快速介绍iOS自动化开始,看看新工具如何加快我们的开发速度。 开发,测试和部署团队需要大量的精力和时间。 特别是,如果要手动执行所有这些步骤。 您必须在每个步骤上都小心谨慎,以避免可能的错误。 使整个开发/测试过程自动化可以提高软件产品的质量,并为您和您的团队节省大量时间。 在自动化过程中,您应该了解一些步骤,例如持续集成,持续交付和持续部署。 让我们简要地解释一下它们: 持续集成 假设您的团队有多个开发人员从事同一项目,而您正在从事Git。 假设一个开发人员发出了“拉取请求”,则所有单元测试都可以在共享计算机(远程或本地)上运行。 测试完成运行后,您知道它们成功或失败。 如果测试通过,则可以开始进行代码审查。 否则,开发人员将收到测试失败的通知,应进行某些修复。 一切准备就绪后,可以轻松合并代码。 此过程称为持续集成,它可以帮助您自动进行开发,测试和集成过程,而不会浪费大量时间。 持续交付 功能或冲刺的每个构建周期称为“持续交付”。 您可以交付功能/冲刺分支以进行持续集成。 如果您已经知道Stack Overflow和Trello的联合创始人Joel Spolsky ,您可能听说过他有一个名为“ Joel Test”的测试。 它衡量软件开发团队的素质,以获取更好的代码。 “进行日常构建”是为他改进代码的重要步骤之一。 如果要检查所有步骤,请单击下面的链接: Joel测试:改进代码的12个步骤 您听说过SEMA吗? 这是一个相当深奥的系统,用于衡量软件团队的水平。 不,等等! 别… www.joelonsoftware.com 持续部署 我认为自动化最迷人的部分是持续部署。 假设您的开发分支已经过测试,可以部署了,Continuous Deployment允许您直接从存储库中上传应用程序。 大多数iOS开发人员认为部署是开发过程中最痛苦的部分之一。 因为有多个步骤将应用程序部署到App Store,并且如果出现错误或问题,您会在过程的“任何”状态下看到一个错误窗口。 确实很烦人,因为您必须对应用程序进行签名,存档并将其上传到iTunes Connect。 如果发生错误,半小时后您甚至可能会看到错误消息。 因此,您应该使其自动化,这样您就不会再浪费太多时间。 我希望本摘要有助于在了解Bitrise之前了解持续集成/交付/部署之间的区别。 有很多自动化工具,例如Jenkins,Travis,Circle,Buddybuild和Bitrise。 他们每个人都提供不同的解决方案和经验。 我决定使用Bitrise代替其他工具。 因为Bitrise: 专为移动应用而构建, 有一个免费的CI计划,没有时间限制, 拥有良好的用户体验, 有充分的文档证明,并且部分开源; […]

我们的Swift样式指南现已开源

Swift在Airbnb的简史 在2014年的WWDC上,Apple用一种新的语言:Swift使我们感到惊讶。 在Airbnb,我们很快跃居第一,并在2014年8月甚至在Swift达到1.0之前就编写了第一行Swift。 那年晚些时候,苹果发布了Apple Watch和WatchKit。 考虑到社区对传闻已久的Apple Watch的兴奋,我们在2015年4月打赌,开始完全在Swift 1.1中编写Airbnb的Apple Watch应用程序的第一个版本。 在WWDC 2015上,Apple正式宣布了Swift 2.0。 因此,当需要构建Apple TV应用程序时,我们尝试了一下并使用Swift 2.0进行了编写。 在这两个成功的试验之后,我们于2016年1月决定要在Swift 2.0中编写所有新功能。 一切进展顺利,直到“大雨燕”改名降落。 为了升级到Swift 3,我们要求一个由两个人组成的团队在5周的时间内进行代码库的迁移。 幸运的是,升级到Swift 4更加简单。 自2017年10月以来,我们的整个代码库都位于Swift 4中。 为什么要使用风格指南? 斯威夫特是一门年轻的语言。 当我们在2014年开始使用它时,我们还没有标准化的Swift样式指南。 我们让15位工程师在我们的代码库中放松下来,他们每个人都以自己的个人Swift风格编写。 很快变得很清楚,如果我们不同意标准化的风格,我们要么花太多时间讨论PR中的风格,要么我们的代码库就像杰克逊·波洛克的画。 当我们在使用Apple TV应用程序时,我们开始了一份非正式的风格指南。 在2016年1月,这与其他临时工作相结合,成为了正式的Airbnb Swift样式指南,我们开始合作定义在Airbnb上编写Swift的首选方式。 苹果和Swift社区为如何编写Swift提供了宝贵的指导。 即使他们绝对影响了我们在Airbnb上编写Swift的方式,我们仍然认为保留自己的样式指南是一种有价值的方法,可以迭代对我们认为正确的事情,同时与社区保持一致。 这就是为什么我们将Apple的建议添加到我们的指导原则中的原因。 我们不想手动识别和更正违反样式指南的行为,因此我们分别采用了Swift社区中最受欢迎的linter和formatter,分别为SwiftLint和SwiftFormat。 在我们的样式指南中,您将找到我们的SwiftLint和SwiftFormat配置。 如果您想使用与我们相同的规则,只需抓住它们并开始在您的项目中使用它! 我们为什么要公开采购? 自从我们开始编写Swift以来,已经过去了很多年,并且社区已经在某些模式上实现了标准化。 Swift语言和社区对我们来说很棒,因此我们想通过分享一些我们在Airbnb上编写Swift所用的模式来做出贡献。 我们了解并非所有人都会同意我们在Airbnb的工作方式。 我们相信有异议的人,我们很想听听您的反馈-我们很高兴分享我们的想法。 如果您不同意或认为我们缺少什么,欢迎您的贡献! 拥抱斯威夫特 在Airbnb,我们将Swift视为iOS开发的未来,并且我们将继续推动尖端本机技术的发展。 鉴于我们即将淘汰React Native,我们将在内部Swift和Kotlin库中投入更多资源。 我们70%的新本地Android代码是用Kotlin编写的,而90%的iOS是用Swift编写的。*我们一直在迁移到最新的语言功能。 *不包括旧版React Native代码。

Swift关联类型设计模式

Swift是一种多范式编程语言,这意味着您可以进行面向对象,面向方面,过程,功能或弹出式编程。 仅举几例。 最后一个“ pop”表示面向协议的编程。 在WWDC 2015的本届会议上,一切都发生了变化,Dave Abrahams在会议上发表了关于这一概念和新思维方式的演讲。 他首先说: 新思维方式: 接下来的40分钟将搁置您通常的编程思考方式。 我们在这里要在一起做的事情不一定很容易,但是我向你保证,如果你坚持我的看法,那将是值得的。 如果您没有看过视频,我郑重建议您现在就观看视频。 因为我在本文中要做的就是分解同一段视频。 同年,Alexis Gallagher发表演讲,他试图解决使用快速编程语言使用关联类型时遇到的一些困难。 这不是一个容易理解的概念,Benedikt Terhechte撰写了有关此主题的文章,Russ Bishop也撰写了他的有关关联类型的回忆录,John Sundell也向关联类型致敬。 罗伯特·爱德华兹(Robert Edwards)详细介绍了类型擦除,李嘉诚(Lee kah Seng)撰写了有关如何在与协议相关类型一起工作时如何实现动态调度的发现。 他们都试图了解参数多态性是如何工作的。 令人讨厌的错误消息的美丽: 由于协议具有自身或关联的类型,因此只能用作通用约束。 每当您看到上述错误时,便会烦恼并开始粉碎键盘。 让我们确切地定义什么是关联类型。 关联类型的定义: associatedtype是未知Concrete Type的协议通用占位符,需要在编译时采用具体形式。 编译时与运行时的清晰度: 运行时和编译时是指软件应用程序不同阶段的编程术语。 编译时是将代码转换为可执行代码的实例,而运行时是转换后的可执行代码实际执行的实例。 关联类型的起源: 这个概念首先出现在“ 函数式编程杂志 ”上的出版物中, 该出版物的标题是: 泛型编程语言支持的扩展比较研究 。 他们着重强调多类型概念 ,这是Swift协议associatedtypes的根源。 Swift还从Scala的Traits和Abstract类型 , Haskell的多参数类型类中获得了一些启发。 以及Rust相关类型 。 然后,它将标准库中的“ 多类型概念”用于其集合类型。 关联类型解决的问题: 引入了associatedtype来解决丰富的多类型抽象问题,而后者在面向对象的子类型化中不可用。 设计用于解决已知的朴素generic protocol实现,尤其是在复杂性随通用类型引入增加而严重恶化的情况下。 保持静态类型安全,同时使语言更具表现力。 […]