Tag: 移动应用开发

iOS 10.2:在CoreFoundation上了解“互斥锁失败:参数无效”

几周前,iOS 10.2开始推出,Spreaker Podcast Radio几乎立即开始从10.2设备获取流量。 我们始终对崩溃进行严格监控,因此几天后,虽然iOS 10.2市场渗透率不断提高,但我们立即注意到iOS 10.2上平均每日崩溃的趋势有所增加。 这是从实际堆栈跟踪中提取的: 或这个: 如您所见,整个堆栈仅包含平台代码,因此一开始很难理解正在发生什么以及涉及应用程序的哪一部分。 我们还注意到有时涉及一些Javascript内容,wtf? 唯一的线索来自我们的日志:每次崩溃发生时,应用程序所做的最后一件事就是尝试从网络中播放(或预加载)音频文件。 我们的应用程序播放了来自多个不同来源的音频文件,并且在这些崩溃中均未发生这些音频文件,这些数据并未显示出某个音频文件(或远程托管)与这些崩溃之间的任何特定关联,我们也无法找到一种在本地播放它们的方法,只是玩一些随机的东西。 在花了数小时收集更多信息之后,我们偶然发现了Core Foundation参考,其中提到了在与代理自动配置相关的函数中通过CFArray和CFError传递结果的某些信息,并且在我们的堆栈跟踪中,这些对PAC / PACClient / PACFetcher的引用晦涩难懂。 if如果PAC表示“代理自动配置”怎么办? 💡💡💡 我们以前没有使用高级代理配置的经验,只是知道有一种方法可以配置设备以自动发现代理设置。 您可以浏览此站点以了解其详细信息,但为了简短起见,它类似于以下内容: 您配置代理自动发现设置以从远程URL获取配置 该URL用PAC文件答复,该文件是公开入口函数的Javascript文件。 在执行过程中,系统调用此函数,传递要获取的资源的url,该函数需要返回如何获取资源的方式,例如通过使用特定的代理或直接连接。 我们立即尝试运行Charles Proxy,并在请求/proxy.pac时启动本地http服务器来提供此PAC文件: 并使用以下网址在iOS设备上配置代理设置: http:// : /proxy.pac 有效!!! 好吧,它崩溃了,但这正是重现问题的关键,对吗? 那么,什么触发了此行为以及如何解决呢? 为了在我们的应用程序中提供出色的播放体验,我们必须实现自己的播放系统,而不是依靠Apple提供的基本AVAudioPlayer,并且此播放系统的某些内部组件直接处理CoreFoundation流。 从HTTP请求创建流后,我们对其进行配置,以考虑系统代理设置,方法是: 显然,注释最后两行将导致崩溃立即停止,但这意味着,如果您的网络仅允许通过代理的出站流量,则播放系统将无法工作。 有99.99%的人确定这是iOS 10.2上的错误,并且受iOS上一些Websocket库中所做工作的启发,其中CoreFoundation不会自动使用代理设置,因为它不了解ws://和wss://方案(此处为示例),我们决定手动实现Proxy Auto-Discovery协议, 但仅在iOS 10.2上,这是我们支持的唯一iOS版本(iOS8 +),不能自行处理 。 这项工作涉及: 查看代理设置,并检查是否启用了自动发现协议 提取PAC文件,并将其内容与CFNetworkCopyProxiesForAutoConfigurationScript一起使用,以确定需要使用哪个代理 相应地在流上设置kCFStreamPropertyHTTPProxy属性。 这里有人遇到过这个问题吗? 您是否还有其他想法可以改善此解决方法并使它更好地工作? 在评论中让我知道! 再见!

Convertigo — MADP和&MBaaS

什么是MADP和MBaaS? MADP MADP代表“移动应用程序开发平台”,它使组织可以轻松地跨许多移动设备和后端体系结构构建应用程序。 MADP允许组织通过重用以前的一些代码来添加越来越多的应用程序。 MADP包括对已部署应用程序的管理,从而可以控制其自定义移动解决方案的整个生命周期。 MADP有两处吐痰: 移动前端框架(例如,Ionic) 中间件服务器/服务,不存储任何数据,而是在移动前端中填充数据; 在检查授权请求时。 MBaaS 移动后端即服务(MBaaS),也称为“后端即服务”(BaaS),是一种模型,用于为Web应用程序和移动应用程序开发人员提供一种将其应用程序链接到后端暴露的后端云存储和API的方法。应用程序,同时还提供用户管理,推送通知以及与社交网络服务集成等功能。 — 维基百科 Convertigo : Convertigo是第一个一起提出将企业级移动平台作为开源的软件供应商。 Convertigo为具有以下功能的移动平台提供了完整的端到端极端敏捷性: 1.通过MBaaS“连接”并利用企业和合作伙伴业务后端应用程序的永久发展 2.将业务逻辑集中到基于云的服务器或本地服务器中。 3.允许在多种不断变化的设备和OS上下文中部署和管理移动应用程序。 Convertigo提供自己的基于云或内部部署的移动应用程序开发平台(MADP)作为开源,这是您开发移动应用程序平台的一种解决方案。 它集成了快速的跨平台移动开发工具(MADP)和功能强大的无代码移动后端即服务(MBaaS)。 Convertigo功能: Convertigo使您可以创建具有不同中间件类型的连接器的各种平台移动应用程序。 它还包括特定于移动设备的功能,例如推送通知 , OAuth等。 还有一些与社区版不捆绑的高级权益: 本机客户端SDK许可证 负载均衡的多实例 本地缓存 离线FullSync数据 扩展连接器(WEB,大型机,SAP) Convertigo Studio: 它带有集成的tomcat服务器,可让您在编写代码时进行测试。 向Convertigo注册后,您将获得免费试用的Convertigo云 空间。您可以使用它来部署中间件项目。 ( 注意:此试用版空间可能对其他Convertigo试用版用户可见,因此在部署到试用版云帐户时要小心 ) Convertigo Studio使您可以在一个界面中开发和测试移动应用程序和中间件 ,如下所示, 您还可以预览适用于不同平台(例如iOS,Android)的移动应用,如下所示: 要测试中间件逻辑,可以使用本地数据库服务器。 设计中间件时,Convertigo允许您映射API的首选输出内容类型。 (例如, “ application / json,application / xml” ) […]

iOS自动化测试:Xcode UI测试入门

如何编写iOS自动化测试? 如何使用Xcode UI测试框架通过Screen Object Pattern编写可靠且可维护的测试? 阅读本文以了解答案。 XCUITest框架简介 第一步,我们需要选择自动化框架。 在本教程中,我们将利用XCUITest Framework。 一个允许测试用户与屏幕实际交互的框架。 它由Apple开发,为用户界面和集成测试提供了强大的功能。 设置Xcode项目以进行UI测试 Xcode UI测试要求访问应用程序源代码,并且必须在计算机上安装Xcode。 首先,我们需要创建UI测试目标: 打开Xcode项目 文件>新建>目标 选择iOS UI测试套件 输入您的组织信息并选择一种编程语言(本教程中将使用Swift) 使用XCUI Test Recorder编写第一个测试 XCUI Test Recorder允许我们记录用户与屏幕的交互并在测试中使用生成的代码: 导航到测试导航器 选择要记录的测试功能 按下UI记录器按钮 在设备上执行测试 为了完成我们的测试,我们应该添加断言来进行验证,以确保预期元素显示在主屏幕上 //预期显示的元素 让玩家= app.collectionViews.staticTexts [“测试”] //声明该元素已显示 XCTAssertTrue(player.exists) 使用辅助功能检查器检查元素 XCUI测试记录器非常适合简单的测试,但是记录器生成的代码需要修改,有时它不能为Element提供正确的定位器。 更好的方法是使用辅助功能检查器: 开放辅助功能检查器 单击开始检查按钮 检查元素以定义定位器 当我们知道Element调试描述时,我们可以根据该值编写Locator: 让playerBalance = app.staticTexts [“ $ 99.999”] 获取屏幕调试描述的另一种方法是在Xcode控制台中打印可访问性层次结构: print(app.debugDescription) 屏幕对象模式简介 在编写用户界面和集成测试时,我们希望使用可读代码创建可维护的测试。 […]

AltConf 2016:Udacity炉边聊天—#4 Zev Eisenberg

Udacity的iOS团队很高兴参加AltConf 2016,我们采访了这么多出色的iOS工程师。 这是我们的第四个炉边聊天! 对于我们在AltConf 2016上进行的第四次炉边聊天,我不得不与Zev Eisenberg坐下。 Zev是Raizlabs的iOS工程师。 他还是一位经验丰富的编织者,杂耍者和事物的综合创造者! Zev在AltConf上的演讲是在BonMot上进行的,BonMot是他写的一个库,使归因于字符串的工作很愉快。 我们谈论什么 Zev和我详细讨论了BonMot,特别是关于如何使您的应用程序中漂亮的排版变得更容易的讨论。 这是在有关设计与工程交叉的大型对话中进行的。 Zev对于用户测试的重要性也有很多话要说,并为我们的学生提供了一些很好的建议: “进行可用性测试……尽可能获取广泛的测试主题,并认真听取他们的意见。” Raizlabs一直与Perkins School for the Blind合作开发一款旨在帮助盲人用户定位公交车站的应用程序,而用户测试对该过程至关重要。 “您的用户总是会让您感到惊讶的……但是……如果有人采取了行动,并且您知道他们正在尝试做什么,请不要告诉他们他们错了。 只需让您的应用对他们做出回应,让您的应用执行他们想要做的事情即可。” 我真的想问Zev的一个问题是让他对WWDC 2016感到最兴奋的事情。他说,他特别对WWDC实验室(特别是可访问性实验室)以及Xcode工具的最新变化(包括谈论最多的)大加赞赏。 -关于视觉内存调试器!)。 我强烈建议观看整个采访。 Zev是一个充满激情的人,对于个人激情和软件工程之间的协同作用,他分享了很多见解: “有很多机会可以接受您怪异的愚蠢激情,并对其进行深入研究……并将其带入编程。” 外卖 如果您需要提醒用户测试的重要性,并且准备对Xcode中可用的新工具感到非常兴奋,并且喜欢从我们的个人兴趣和编程兴趣的融合中产生伟大的软件的想法,那么我强烈建议您和我一起在Zev花一些时间! 网络上的Zev Eisenberg https://twitter.com/zeveisenberg http://zeveisenberg.com/ 请继续关注iOS工程师Mike Lee主持的Fireside Chat#5! 对iOS开发感兴趣? 无论您是编程新手还是准备进阶学习,我们都为您准备了程序。 今天就报名! iOS开发人员纳米学位计划 开始进行iOS App开发纳米学位计划

您应该从头开始重建iOS应用程序的7个理由

在过去的六个月中,我们的iOS团队一直致力于从头开始重建UI,并提出了一个全新的版本。 尽管停止新功能路线图并从头开始重新设计应用程序绝非易事,但付出的努力令人惊讶地值得。 重建应用程序可以使它们变得比以往更好的七个原因如下: 1.减少技术债务 我们的应用程序已使用了超过4年的历史,并且具有过时的体系结构,由于这种技术负担,我们许多iOS应用程序的不稳定性变得不可修复。 重建我们的应用程序使我们有机会解决这些不稳定性,并使它们更容易解决。 2.提高开发速度 维护现有功能使我们放慢了脚步。 例如,实施新的iOS 9功能使我们花了4倍的时间。 技术日新月异,因此“传统”架构可能会在您不知不觉中就给您带来打击。 重建实际上可以提高我们使用新功能的速度,并在很短的时间内收回成本。 3.与最新的Apple技术兼容 新的外形尺寸支持很困难,我们没有使用Swift。 与最新技术的兼容性为我们奠定了基础,正如苹果所期望的那样,以最快,最简单的方式支持新的外形尺寸。 4.降低维护成本 每个功能都必须为iPhone和iPad开发,而iPad上仍然缺少一些功能。 通过使用标准的Apple技术(例如自动布局),我们不仅降低了维护成本,而且还利用了每种设备的独特属性。 5.提高应用质量 面对现实,Apple之所以推出新技术是有原因的-为开发人员和用户改进和改进了平台。 彻底刷新我们的应用程序意味着我们可以利用所有Apple内置的UI元素,并显着提高响应能力,体系结构和稳定性。 6.提升苹果生态系统的价值 遵循《 Apple人机界面指南》并使用Apple推荐的技术和应用程序架构,我们可以为生态系统贡献更多价值。 苹果公司的技术提供了无缝的用户体验,因此采用最新技术对苹果公司及其所有产品的最终用户都有意义。 7.吸引世界一流的工程师 最好的iOS工程师希望使用最新的Apple技术。 通过保持领先地位并成为我们类别中的创新者,我们可以继续吸引最优秀的工程师。 在Dashlane,我们相信雇用最有才华的人才会随着时间的推移使我们的产品提高10倍。 我没想到的一个好处是,回到基础知识上也能起到赎回作用。 意思是每个人都有机会回到更高的标准。 我很高兴地说,这次改进产生了更好的代码。 每个人都挑战自己提高标准,现在没有人愿意降低标准。 相信我们可以做得更好,接受挑战而不是避免挑战已成为我们文化的一部分。 因此,请考虑重新设计应用程序的8号理由。 也许这8个原因都不适用于您,但是如果有两个原因,那么至少您应该考虑执行与我们类似的过程。 通过本次练习,我们最终完成了许多出色的工作,例如按照本书的Apple HIG重新设计我们的应用程序,更改架构以使其更适合iOS环境,并使用自动布局以支持从iPhone 5c到iPad Pro的不同尺寸。完全一样的经历。 更重要的是,我们通过使用最新的Apple技术(例如Storyboard,Swift和Spotlight搜索)完成了所有这些工作。 我们很高兴看到即将在6月的WWDC上宣布的内容,我们知道我们将能够保持领先于Apple技术的优势,而不必处理UI上的重大技术债务。我们华丽的新应用程序,可在App Store中找到:https://itunes.apple.com/us/app/dashlane-password-manager/id517914548?mt = 8。 我们的启动视频

Appstores 2.0

iOS应用商店于2008年发布是成功采用智能手机革命的关键特征。 Google于4年后加入,此后两家公司统治着移动应用行业。 直到现在,在苹果公司第一个应用程序商店推出8年后,随着Google宣布对Android即时应用程序进行升级,应用程序商店的基础开始动摇。 以下是有关应用程序构建和发布的未来前景的一些想法。 但是首先-有什么问题? 每个人都可以创建一个网站,但是只有专业人士才能发布移动应用程序。 撇开所有需要的设计和开发,向商店提交应用程序是一项繁琐的任务。 创建完应用程序后,您将无法立即将其发布到商店。 不仅需要获得商店的批准,而且即使在批准新提交的版本之后,也需要管理以前的版本。 这是巨大的开销,只有拥有正确知识和经验的人才能理解和掌握。 随着诸如Firebase或Parse(RIP)之类的工具的兴起,这些工具允许远程更改某些应用程序设置,变得更加难以理解现有的版本以及所做的更改将如何影响这些版本。 另一方面,网站建设和发布非常简单。 您只有一个真实的网站内容和设计来源。 完成编辑并单击“发布”按钮后,您的网站会立即更新。 当考虑到持续交付和部署自动化的新趋势时,应用程序发布周期的开销看起来会更糟。 这就是为什么有这么多的工具可以让您开始构建自己的网站表单的原因,而在移动端却很少有工具可以这样做。 据我所知,没有一个允许自动发布和管理商店中的版本。 为什么应用流式传输可以以及如何改变所有这些? 从消费者方面来说,应用程序流式传输允许用户打开应用程序而无需先下载它。 使应用程序体验类似于打开网站链接。 现在,如果应用程序可以实时流传输到用户的设备,则从概念上讲,没有理由不应该同时对其进行实时部署,并且在应用程序商店中只有一个真实来源。 想象一个应用程序像一个网页,但不是用HTML,CSS和Javascript编写,而是用Java,Swift或React Native编写。 部署流应用程序会带来新的挑战,尤其是在设备权限,用户隐私和设备功能方面。 并非所有解决这些问题的方法都容易,但可能可行。 假设这就是Google的发展方向,那么看看苹果将如何应对这一举动将会很有趣。 应用流式传输对Google来说非常好,因为它可以直接从Google搜索中发现和安装应用。 对于苹果公司而言,情况并非如此,因为他们倾向于使应用程序在应用商店中保持关闭状态。 另一方面,不对如此重大的变化做出反应可能会留下“领先”的苹果。 如果苹果选择不参加Google应用程序流媒体聚会,他们可能会选择更加顺从的做法,并大幅改善其API,以实现应用程序提交和管理的自动化; 这将使第3方使用出色的工具来填补空白,以简化应用程序的提交和管理。 为了完成这一简短的一厢情愿的想法,我想指出过去几年中的一些重要里程碑,这些里程碑可能会加强我们即将处于该领域正经历着真正变化的想法: 2008年-宣布iOS应用商店 2012年-宣布Android应用商店 2013年— Apple启用了自动更新已安装应用程序的选项,而无需用户批准 2014年—苹果公司收购了TestFlight:改进了苹果产品上的应用提交渠道 2015年-Google开始在其搜索引擎中为应用编制索引,从而为应用流式传输奠定了第一个里程碑。 2015年-Twitter收购了fastlane,fastlane是一个开发工具,可帮助自动和简化应用程序提交。 2016年—苹果将新提交的审批时间从一周以上缩短到不到两天 2016年-Google宣布推出Android即时应用程序 -一种无需安装应用程序即可流式传输部分应用程序的方法 2017年— ???

原生VS混合应用程序开发

关于本机与混合应用程序的开发,关于哪个更赚钱的争论一直持续了一段时间。 如果您现在想要自己构建移动应用程序,那么这场辩论比以往任何时候都更加重要。 一方面,我们有一个可以在所有平台上使用的应用程序,这是一个诱人的想法。 但是,速度,外观,功能甚至用户体验的最终结果可能会受到限制。 考虑到这一点,我们创建了最终指南,在该指南中我们将回答“本机应用程序或混合应用程序开发之间的区别是什么?”这个问题,什么是您更好的选择。 本机应用程序开发 本机应用程序开发的优缺点[/标题] 首先,让我们看一下本地移动应用程序开发。 顾名思义,此选项将使您的应用在每个平台上都具有本机编程语言。 例如,Objective-C或Swift适用于iOS,而Java适用于Android。 分解每种代码语言,存在一组特定的框架和技术。 最初,当公司想要开发应用程序并将其嵌入设备中时,这个想法就产生了,并且可以通过图库,闹钟,浏览器,音乐播放器,照片等看到。 本机应用程序开发的好处 用户体验-首先,那些多年使用Android的用户在iOS设备上会感到不舒服。 因此,使用本机应用程序,用户将根据直觉行事,他们应该更容易理解功能。 速度和性能-考虑到该应用程序已针对iOS或Android平台进行了优化,因此将在性能级别上显示出来。 随着本机应用程序的开发,所有因素都被考虑在内,包括智能手机的内存和电池。 不仅实现手势更容易,代码运行更快,新功能也更快集成,并且地理位置跟踪也保持简单。 数据保护-通过本机移动应用程序开发,这是真正确保数据保护的唯一方法,因为它们都与数学有关。 该任务需要充分利用硬件资源。 灵活性-寻找本机应用程序会变得更好的原因时,我们还应该考虑通过完全访问智能手机的相机,数据库,地理位置和其他功能,使应用程序获得的好处。 对于混合开发,构造接口时存在某些限制,因为它将在多个平台上使用。 没有这些限制,该技术提供的所有内容都可以实现。 个性化-市场上有许多不同的Android设备,原生移动应用程序开发是调整每个设备布局的唯一真正方法。 测试便利性–本机和混合应用程序开发之间的另一个区别在于测试阶段。 即,如果应用程序使用的内存比最初预期的要多,则立即显而易见。 来自应用商店的支持—如果您要构建本机应用,则用户可以通过自己的商店(无论是Google Play还是App Store)下载您的产品。 如果您附近有智能手机,请立即在商店里逛逛,我们保证“精选”部分没有一个应用程序经过混合开发设计。 当然,可能会有一些游戏,但是这些应用程序的界面不是系统的。 最新技术—智能手机和操作系统更新后,就会提供硬件和软件功能以用于实施目的。 如果您选择进行混合应用程序开发,则将不得不等待新操作系统的发布以实现功能。 不幸的是,不可能预测对新功能的支持。 本机应用程序开发的缺点 应用程序开发的成本-每个平台都需要大量开发,因此该过程将需要更多的人员,因此需要更多的资金。 应用程序开发的速度-同样,每个平台的所有内容都必须唯一,因此完成该应用程序还需要更长的时间。 支持—最后,为了提高应用程序开发的速度和成本,要修复两个(或什至更多)平台的错误和错误要多于一个。 *当然,所有这些缺点都与您打算为其开发应用程序的设备数量紧密相关 混合应用程序开发 混合应用程序开发的优缺点[/标题] 对于本机应用程序和混合应用程序开发之间的主要区别,它来自于应用程序的开发过程。 使用Hybrid时,我们会立即开发所有内容,而不是单独进行所有开发。 在任何时候,编程语言都是标准的,就像您在开发网站时所看到的一样。 使用CSS或HTML。 当您雇用应用程序开发人员时,他们会告诉您实现混合移动应用程序的不同方法。 例如,可以通过编写C ++代码以及各种平台的包装程序来手动完成此操作。 混合应用程序开发的好处 支持 -首先,开发周期要简单得多,并且可以立即进行修复。 而且,所有更新都发生在服务器端,而不是通过商店进行更新。 提高速度/降低 应用程序开发成本。 —对于预算有限的人,应用程序开发仅进行一次,而您不需要那么多的程序员。 […]

目标C Takvim Etkinlikleri

EKEventStore商店,商店,商店,商店,图书馆,图书馆。 Takvim bilgilerine EKEventsınıfınınözellikleriyleerişebilirsiniz。 Aynışekilde,EKEvent,请发送邮件至zelzellerler ayarlayarak takvim bilgilerinideğiştirebilirsiniz。 Takvime Etkinlik Eklerken: 您可以在olarakkullanıcanbuişlemiyapmakiçinyetki istemelisiniz中找到答案。 Yetki个人资料info.plistdosyasınaalttakialanıekleyin。 EKEvent事件事件EventWithEventStore:yöntemiyleyeni bir olayoluşturun。 Yeni biretkinliğinayrıntılarınıveya dahaönceTakvimveritabanındangetirdiğinizbiretkinliği,olayınkarşılıkgelenözellikleriniayarlayarakdüzenleyebilirsiniz。 错误EKEventStore保存事件:span:commit:error: ile takvimveritabanınakaydedin。 Takvime Etkinlik Silerken: BirolayıTakvimveritabanındankaldırmakistiyorsanız,EKEventStoreyönteminiremoveEvent :跨度:提交:错误: kullanın。 删除事件:跨度:提交:错误: yönteminin跨度参量EKSpanFutureEvents belirterekkaldırabilirsiniz。

LyriCode现在可以购买了

测试版即将来临 在过去的四个月中,我们一直在研究Lyricode,最终达到了让我们满意地展示应用程序状态的地步。 这就是为什么现在可以在Apple App Store上以0.99美元的价格购买LyriCode的原因。 LyriCode是一种自动文本编辑器,旨在通过多种方式帮助世界各地的艺术家。 我们的目标是让艺术家使用LyriCode,以便他们可以专注于艺术的实质,而不必担心结构。 它会自动识别输入到系统中的所有文本中的所有标题,文章,重复单词和押韵。 这使艺术家能够注意到自己作品中遗漏的事物,并看到视觉反馈以了解他们的工作。 该应用程序还具有许多其他可自定义的选项,使用户可以根据自己的需要量身定制体验。 这只是我们希望看到LyriCode成为开始的开始。 LyriCode目前处于测试阶段,因此尽管它能够按我们预期的方式运行,但我们仍对该应用程序有更大的计划,这仅仅是个开始。 毕竟,为什么不庆祝最初的发布,我们不会在本文中涉及任何细节,但是我们将在不久的将来发布有关LyriCode扩展计划的信息。 非常感谢您提供任何反馈意见,请随时发送任何方式。 那些寻求与我们联系或在Greedy Bear Studios了解更多关于我们团队的方法的人应该仔细阅读我们的网站。 我们期待着大家的来信,并继续我们在LyriCode上的工作。

学习Swift和iOS开发第12部分:多态

在本文中,您将通过阅读有关多态的方法结束对面向对象编程的基础研究。 除了成为一个很酷的词外,多态性是成为程序员时要理解的一个非常重要的概念。 在开发人员求职面试中通常会被问到:“您能定义’多态性’吗?”我们将打破多态性的含义,含义以及它的实际方式,而不是像鹿一样大开眼界。在代码中播放。 什么是多态? 长期以来对多态性的编程定义是:“多态性允许表达某种合同,可能有许多类型以不同的方式实现该合同,每种类型均根据自己的目的。” 这可能只是教科书的定义,但是这里的基本概念是我们的代码可以以许多不同的形式出现,并且其功能可以以不同的方式实现。 这可能仍然令人困惑,没关系。 让我们构建一个代码示例,因为这样更容易理解多态。 创建一个新项目 首先,如果尚未打开Xcode,请点击Create New Playground 。 为其命名,如Polymorphism ,然后单击Next 。 选择某个位置以保存此.playground文件,然后单击“ Create以保存它。 您应该会看到类似下面的屏幕。 删除左侧的所有样板代码,但根据需要保留import UIKit 。 Creating a base Class with default functions 首先,我们将创建一个名为Shape的类,该类具有area属性和一个用于计算形状面积的函数。 将以下内容添加到您的游乐场: 类Shape { var区域:Double? func computeArea(valueA:Double,valueTwo:Double){ } } 我们的基类Shape包含了我们需要的一切-一个用于存储面积的变量和一个用于计算具有两个输入值的面积的函数。 让我们创建一个子类以继承Shape类。 为了证明多态性,我们需要做的是遵守Shape设置的“合约”,该合约具有一个calculateArea函数。 创建一个三角形子类 添加以下类,并覆盖Playground底部的函数calculateArea(valueA:valueB:) : 类Shape { var区域:Double? func computeArea(valueA:Double,valueB:Double){ } } 三角形:形状{ 覆写func computeArea(valueA:Double,valueB:Double){ 面积=(值A […]