Tag: 运行时

在您的Swift应用中运行时内省和修改类

介绍ObjectiveKit 还记得2016年5月的重大动态辩论吗? 如果没有,请快速阅读以下内容: 动态迅捷 布伦特·西蒙斯(Brent Simmons)(如果有不清楚的话,请参见存档):在最近和将来的文章中,我正在记录问题…… mjtsai.com 简而言之,争论是开发人员目前正在利用ObjC运行时的动态功能解决许多类型的问题。 当我们(可能)朝着Swift完全取代Objective C的未来迈进时,Swift将需要提供自己的本机动态解决方案。 在iOS和macOS上,至少在可预见的将来,Swift将在Objective C运行时之上运行,这意味着我们可以完全访问这些功能。 可悲的是,在Swift中使用它们确实很痛苦。 我们可以做得更好…… 你好ObjectiveKit ObjectiveKit是用于访问Objective C运行时函数的新Swift框架。 它使自省,修改方法和在运行时创建类之类的事情变得非常容易,以一种对Swift来说尽可能原生的方式进行。 它是如何工作的? 您需要做的就是初始化一个ObjectiveClass对象,该对象的类型是您要内省/修改的类,然后使用ObjectiveKit的众多功能之一。 这是一个简单的示例: 使用Objective C运行时既有趣,有教育意义,又对调试非常有用。 但是,这也很危险-在生产中使用前请格外小心。 检查一下: github.com/marmelroy/ObjectiveKit

运行时中的动态TabBar项-iOS(Swift)

假设您有一个同时提供免费和高级内容的应用程序。 显然,您不希望免费用户访问针对高级用户的内容。 例如,我们正在向用户提供在线视频课程。 免费用户可以访问和流媒体免费视频。 高级用户可以流式传输所有视频,下载视频,访问社区论坛并提出问题与解答。 根据用户的计划,我们有一个API可以提供该用户可用的功能列表。 例如,考虑API的JSON响应如下所示。 JSON响应(免费用户): { “计划”:“免费”, “功能”:[“视频”,“个人资料”] } JSON响应(高级用户): { “ plan”:“ PAID”, “功能”:[“视频”,“论坛”, “下载”, “轮廓” ] } 解析完上述JSON响应后,我们将获得功能列表。 然后,我们将迭代并将不同的TabBar项目添加到UITabBarController。 让我们创建一个枚举来定义一组功能。 这提供了当前版本应用程序的所有可用功能。 枚举功能:字符串{ 案例视频=“视频” 案例下载=“下载” 案例论坛=“ FORUMS” 案例档案=“ PROFILE” } 现在,我们从JSON响应中获得了免费用户和付费用户的功能列表。 让我们开始迭代视图控制器以显示在UITabBarController中。 为所有功能选项卡加载视图控制器 上面的代码似乎有很多字符串和重复的代码。 我们可以通过涉及一种新类型来重构它。 让我们创建一个TabItem类型来封装所有信息,并使它看起来更干净。 提取常用属性以显示“选项卡项目” 使用TabItem类型,我们将所有字符串提取到一个类型中,并创建了静态TabItem以定义不同的选项卡。 另外,我包括了order属性,以使选项卡项保持我们想要的顺序。 我还在TabItem中添加了一个辅助方法,以从相应的故事板上加载视图控制器。 加载“功能”选项卡的视图控制器的助手方法 使用上述方法,我们可以将TabItem类型转换为要加载的ViewController。 这将有助于消除重复的代码。 加载用于运行时功能列表的所有视图控制器的超级简单方法。 将所有TabItem添加到数组中之后,我使用顺序对其进行了排序,还将它们转换为ViewController。 而已。 我们完了。 多田!! 🎉 改进之处: 无需对ViewControllers名称进行硬编码,我们可以按照我在此处说明的方式从类型中提取:https://medium.com/@dinaraja/load-view-controllers-effortless-swift-dd49f11f1d99 […]