问题标签 [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.
ios - 接收私有财产的未声明选择器
我在程序集中有这个初始化程序:
最后一行,注入时mapFromSearchInput
我收到警告
我在私有扩展中拥有这两个属性APBSearchWireframe
并mapWireframe
符合多种接口
如果我将属性定义从私有扩展名移动到 .h,警告就会消失。为什么第二次注入时出现错误,而第一次则没有?我已正确完成所有导入,并且该应用程序运行良好,但这个警告真的很烦人......
谢谢你。
ios - 台风注入 xib 加载的表格单元格
我正在尝试将我的一些视图控制器和UITableView
子类迁移到使用 Typhoon,但我找不到任何关于如何处理从 tableView 生成的单元格的文档dequeReusableCellWithIdentifier
。
我正在使用的 TableViewController 使用多种单元格类型,这些单元格类型在viewDidLoad
using中向 TableView 注册registerNib:forCellReuseIdentifer:
。
我们应该怎么做才能让 Typhoon 注入从 xibs 加载的细胞?
swift - 用 Typhoon 注入相同的属性两次
我计划在一个新创建的项目中引入一个依赖注入框架,并且发现Typhoon看起来非常不错(除了在 Swift 中引用方法和属性时必须使用字符串)。它通常似乎很适合我的应用程序,但是我为处理网络请求所做的构造存在问题。
我所有的视图控制器(需要网络访问)都继承自一个ServiceViewController
用于延迟初始化服务的视图控制器(此上下文中的服务是一个用于处理网络通信的类):
最后一个方法cancelPendingTasks
和hasPendingTasks
是我想要保留这个架构的原因。通过将 ViewController 的所有服务放在一个列表中,我们可以确保我们不会忘记取消其中一项服务上的待处理任务。
现在,当我想引入 Typhoon 时,我可以在初始化程序中注入我所有的服务:
这种方法有两个缺点:
- 取消所有任务(或类似任务)需要调用所有服务
- 服务不再在需要时延迟初始化
广告 1) 处理 now 的一种方法是将这两个服务从初始化程序cancelAllPendingTasks()
添加到列表中。ServiceViewController.services
然后cancelAllPendingTasks()
将能够访问所有服务。但我正在寻找一种避免这样做的方法,这样以后添加服务就不需要“记住做这个和那个”
广告 2)我没有看到通过依赖注入来做到这一点的方法。但我不认为这是一个大问题,因为服务的内存占用可能不那么值得注意:-)
所以我的问题是:我可以以某种方式将服务同时注入构造函数和服务列表吗?
编辑:
当我从@JasperBlues 的回答中发现很容易将同一个对象两次注入属性和初始化程序时,我的第二个问题引起了我的更多关注:如果我们将一堆服务注入到初始化程序中,但忘记注入完全相同的服务放入数组中(例如我们忘记了其中一个),我们会遇到非常难以发现的错误,因为在hasPendingTasks
某天方法返回错误结果之前,没有人会发现它,并且因此而挂起。这在我的原始设计中是不可能的,但如果我们应该注入两次服务,我们会突然得到一个容易出错的重复。
swift - 用于测试的不同组装
我在我的项目中使用 Swift、CocoaPods 和 Typhoon。我有一些课程可以为我提供 Web 服务。在我的测试中,我想使用一个实际上不调用 Webservice 的不同类。所以我认为只使用另一个程序集进行测试是一个好主意,我在其中注入了虚假的 webservice 类。
豆荚文件
问题是我在我的装配中得到“使用未声明的类型'TyphoonAssembly'”进行测试。是否有最佳实践如何在台风测试中注入其他东西?
ios - 如何访问已激活 plist 的程序集?
我正在转换一个项目以使用台风的 plist 集成。我可以看到我添加到TyphoonInitialAssemblies
密钥的程序集正在被激活,但是在我不知道如何访问激活的程序集之后。
ios - 无法注入属性,未找到设置器选择器
使用 Typhoon 和 Swift,我正在设置我的项目,但我遇到了这个问题。我这样TPLAddInteractor
上课
我的程序集看起来像这样
然后我在运行应用程序后立即收到此错误:
我正在阅读 Typhoon 的 Swift 示例,我的代码中没有发现任何异常。但我是 Swift 的新手,所以也许我遗漏了一些东西。
谢谢
ios - 台风:将运行时参数注入单例
我试图弄清楚如何在创建单例时将运行时参数注入到单例中,然后从那时起记住这些参数。不过,我不确定运行时参数的接口是否可以支持这一点。比如说,我有一个需要令牌的 Client 对象,并且具有以下初始化程序:
令牌是在运行时从服务器获取的,对于每个用户来说都是不同的,所以我不能简单地将 NSString 放在定义中。因此,我在 Typhoon 程序集上创建了以下方法:
但是,将来(当我将此客户端注入其他类时),我将没有手头的令牌来调用此方法。因此,例如,我希望能够注入[self client]
。由于客户端是单例并且已经创建,因此无论如何都不需要令牌。
但是,我似乎无法找到一种方法来做到这一点。显然,定义一个单独的调用方法client
只会返回一个不同的客户端。如果客户端已经存在,我可以直接调用clientWithToken:nil
并且参数将被忽略吗?也许遍历程序集的singletons
数组会起作用,但这显然很不雅。
我考虑过按类型注入(所以我不需要调用方法),但是我有多个相同类型的不同客户端,所以我需要明确说明要注入哪个客户端。当然,也可以选择从初始化程序中删除此参数,而是将其设置为程序集外部的属性;但是这种模式在我们的整个应用程序中都使用过,所以我想避免重写那么多代码。
谢谢你。
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 应用程序。
ios - 台风:从程序集中检索情节提要时出现异常
我正在使用 Typhoon 进行依赖注入。但我有一个问题。有时,我会收到以下异常:
发生此异常的代码如下所示:
我的汇编代码如下所示:
我有完全相同的代码将程序集注入到我的 RootViewController 中,它还检索情节提要并以与上述相同的方式实例化视图控制器。但这永远不会失败。
我无法确定为什么偶尔会失败并且不一致的任何原因。但我有一种感觉,在 Swift 代码中使用可选类型可能无法正确初始化程序集。会是这样吗?或者你能建议我能做些什么来使这段代码工作吗?
编辑:
我已经TyphoonComponentFactory._registry
从 rootViewController 和 PaymentApproveViewController 打印出来了。有趣的结果是:
- 在 RootViewController 中,
_registry
包含我的 ApplicationAssembly 中所有台风定义的列表。即所有对象和情节提要定义 - 在 PaymentApproveViewController 中,包含除我的五个故事板之外的
_registry
所有对象。这就是 TyphoonComponentFactory.componentForKey 在找不到情节提要时抛出异常的原因。
顺便说一句:程序集的地址在rootViewController
和中不同PaymentApproveViewController
。所以注入的是两个不同的程序集。可以避免这种情况,还是预期的行为?
ios - 手动转换 TyphoonConfig
基本上我想做这样的事情。
但是 TyphoonConfig() 来自 TyphoonInjectionByConfig 类型。
是否可以手动转换 TyphoonConfig 对象,还是我需要注入它然后它会转换?