问题标签 [typhoon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
445 浏览

ios - 接收私有财产的未声明选择器

我在程序集中有这个初始化程序:

最后一行,注入时mapFromSearchInput我收到警告

我在私有扩展中拥有这两个属性APBSearchWireframe

mapWireframe符合多种接口

如果我将属性定义从私有扩展名移动到 .h,警告就会消失。为什么第二次注入时出现错误,而第一次则没有?我已正确完成所有导入,并且该应用程序运行良好,但这个警告真的很烦人......

谢谢你。

0 投票
1 回答
548 浏览

ios - 台风注入 xib 加载的表格单元格

我正在尝试将我的一些视图控制器和UITableView子类迁移到使用 Typhoon,但我找不到任何关于如何处理从 tableView 生成的单元格的文档dequeReusableCellWithIdentifier

我正在使用的 TableViewController 使用多种单元格类型,这些单元格类型在viewDidLoadusing中向 TableView 注册registerNib:forCellReuseIdentifer:

我们应该怎么做才能让 Typhoon 注入从 xibs 加载的细胞?

0 投票
2 回答
242 浏览

swift - 用 Typhoon 注入相同的属性两次

我计划在一个新创建的项目中引入一个依赖注入框架,并且发现Typhoon看起来非常不错(除了在 Swift 中引用方法和属性时必须使用字符串)。它通常似乎很适合我的应用程序,但是我为处理网络请求所做的构造存在问题。

我所有的视图控制器(需要网络访问)都继承自一个ServiceViewController用于延迟初始化服务的视图控制器(此上下文中的服务是一个用于处理网络通信的类):

最后一个方法cancelPendingTaskshasPendingTasks是我想要保留这个架构的原因。通过将 ViewController 的所有服务放在一个列表中,我们可以确保我们不会忘记取消其中一项服务上的待处理任务。

现在,当我想引入 Typhoon 时,我可以在初始化程序中注入我所有的服务:

这种方法有两个缺点:

  1. 取消所有任务(或类似任务)需要调用所有服务
  2. 服务不再在需要时延迟初始化

广告 1) 处理 now 的一种方法是将这两个服务从初始化程序cancelAllPendingTasks()添加到列表中。ServiceViewController.services然后cancelAllPendingTasks()将能够访问所有服务。但我正在寻找一种避免这样做的方法,这样以后添加服务就不需要“记住做这个和那个”

广告 2)我没有看到通过依赖注入来做到这一点的方法。但我不认为这是一个大问题,因为服务的内存占用可能不那么值得注意:-)

所以我的问题是:我可以以某种方式将服务同时注入构造函数服务列表吗?

编辑: 当我从@JasperBlues 的回答中发现很容易将同一个对象两次注入属性和初始化程序时,我的第二个问题引起了我的更多关注:如果我们将一堆服务注入到初始化程序中,但忘记注入完全相同的服务放入数组中(例如我们忘记了其中一个),我们会遇到非常难以发现的错误,因为在hasPendingTasks某天方法返回错误结果之前,没有人会发现它,并且因此而挂起。这在我的原始设计中是不可能的,但如果我们应该注入两次服务,我们会突然得到一个容易出错的重复。

0 投票
1 回答
156 浏览

swift - 用于测试的不同组装

我在我的项目中使用 Swift、CocoaPods 和 Typhoon。我有一些课程可以为我提供 Web 服务。在我的测试中,我想使用一个实际上不调用 Webservice 的不同类。所以我认为只使用另一个程序集进行测试是一个好主意,我在其中注入了虚假的 webservice 类。

豆荚文件

问题是我在我的装配中得到“使用未声明的类型'TyphoonAssembly'”进行测试。是否有最佳实践如何在台风测试中注入其他东西?

0 投票
1 回答
586 浏览

ios - 如何访问已激活 plist 的程序集?

我正在转换一个项目以使用台风的 plist 集成。我可以看到我添加到TyphoonInitialAssemblies密钥的程序集正在被激活,但是在我不知道如何访问激活的程序集之后。

0 投票
2 回答
925 浏览

ios - 无法注入属性,未找到设置器选择器

使用 Typhoon 和 Swift,我正在设置我的项目,但我遇到了这个问题。我这样TPLAddInteractor上课

我的程序集看起来像这样

然后我在运行应用程序后立即收到此错误:

我正在阅读 Typhoon 的 Swift 示例,我的代码中没有发现任何异常。但我是 Swift 的新手,所以也许我遗漏了一些东西。

谢谢

0 投票
1 回答
531 浏览

ios - 台风:将运行时参数注入单例

我试图弄清楚如何在创建单例时将运行时参数注入到单例中,然后从那时起记住这些参数。不过,我不确定运行时参数的接口是否可以支持这一点。比如说,我有一个需要令牌的 Client 对象,并且具有以下初始化程序:

令牌是在运行时从服务器获取的,对于每个用户来说都是不同的,所以我不能简单地将 NSString 放在定义中。因此,我在 Typhoon 程序集上创建了以下方法:

但是,将来(当我将此客户端注入其他类时),我将没有手头的令牌来调用此方法。因此,例如,我希望能够注入[self client]。由于客户端是单例并且已经创建,因此无论如何都不需要令牌。

但是,我似乎无法找到一种方法来做到这一点。显然,定义一个单独的调用方法client只会返回一个不同的客户端。如果客户端已经存在,我可以直接调用clientWithToken:nil并且参数将被忽略吗?也许遍历程序集的singletons数组会起作用,但这显然很不雅。

我考虑过按类型注入(所以我不需要调用方法),但是我有多个相同类型的不同客户端,所以我需要明确说明要注入哪个客户端。当然,也可以选择从初始化程序中删除此参数,而是将其设置为程序集外部的属性;但是这种模式在我们的整个应用程序中都使用过,所以我想避免重写那么多代码。

谢谢你。

0 投票
1 回答
239 浏览

ios - TyphoonConfig 正在尝试使用错误的捆绑路径加载 plist

我是 Typhoon 的新手,似乎无法弄清楚如何让我的 Configuration.plist 正确加载。我的项目是以 Swift PocketForecast 示例为模型的,尽管我从我自己的基于 CocoaPods 的项目开始并自己添加了 Typhoon(即我不是从克隆的 PocketForecast 项目开始的)。我正在使用与多个程序集的 plist 集成。

当我使用这个时:

我收到一个文件未找到错误,在调试器中我可以看到它使用的路径是“/path/to/MyProject.app/Frameworks/Typhoon.framework”,但当然我的配置文件不在那里,它位于在“/path/to/MyProject.app/Configuration.plist”。是的,我已经确认该文件确实存在。

我试图通过执行以下操作来解决此问题:

奇怪的是,这有效——有时。它看起来是随机的,并且基于我的其他 Typhoon 程序集的加载顺序。换句话说,有时一切正常,但有时台风初始化会出现各种不同的错误,例如“没有与 id XYZ 匹配的组件”或“在配置中找不到值”。但就像我说的,有时它工作得很好。

我一定错过了台风初始化的一些基本部分,因此非常感谢任何帮助!

编辑:所以经过一番摸索之后,看起来我上面尝试的第一种方法失败了,因为 CocoaPods 使用框架而不是 Swift 项目的静态库的问题?我在 TyphoonResource 中找到了这段代码:

由于[self class]将解析为 Typhoon 框架内的一个类,我想我明白为什么它是它正在使用的包,但它对我来说似乎是一个错误。我要看看我是否能弄清楚为什么这不会破坏 PocketForecast 应用程序。

0 投票
1 回答
342 浏览

ios - 台风:从程序集中检索情节提要时出现异常

我正在使用 Typhoon 进行依赖注入。但我有一个问题。有时,我会收到以下异常:

发生此异常的代码如下所示:

我的汇编代码如下所示:

我有完全相同的代码将程序集注入到我的 RootViewController 中,它还检索情节提要并以与上述相同的方式实例化视图控制器。但这永远不会失败。

我无法确定为什么偶尔会失败并且不一致的任何原因。但我有一种感觉,在 Swift 代码中使用可选类型可能无法正确初始化程序集。会是这样吗?或者你能建议我能做些什么来使这段代码工作吗?

编辑:

我已经TyphoonComponentFactory._registry从 rootViewController 和 PaymentApproveViewController 打印出来了。有趣的结果是:

  • 在 RootViewController 中,_registry包含我的 ApplicationAssembly 中所有台风定义的列表。即所有对象和情节提要定义
  • 在 PaymentApproveViewController 中,包含我的五个故事板之外的_registry所有对象。这就是 TyphoonComponentFactory.componentForKey 在找不到情节提要时抛出异常的原因。

顺便说一句:程序集的地址在rootViewController和中不同PaymentApproveViewController。所以注入的是两个不同的程序集。可以避免这种情况,还是预期的行为?

0 投票
1 回答
180 浏览

ios - 手动转换 TyphoonConfig

基本上我想做这样的事情。

但是 TyphoonConfig() 来自 TyphoonInjectionByConfig 类型。

是否可以手动转换 TyphoonConfig 对象,还是我需要注入它然后它会转换?