使用Typhoon和Swift从故事板注入视图控制器
注入使用Typhoon和Swift从UIStoryboard实例化的UIViewController的正确方法是什么?使用Typhoon和Swift从故事板注入视图控制器
我无法在示例应用程序中找到任何明确的示例,并且当我从文档翻译Objective C代码时,它会引发异常。
下面是我AppAssembly代码:
public dynamic func loginViewController() -> LoginViewController {
return TyphoonDefinition.withClass(LoginViewController.self) {
(definition) in
definition.injectProperty("socialClient",with:self.coreComponents.socialClient())
//definition.scope = TyphoonScope.Singleton
} as LoginViewController
}
而且这是被抛出的异常:
0x10636ca1c: jne 0x10636ca10 ; swift_dynamicCastClassUnconditional + 48
0x10636ca1e: leaq 0x36b3d(%rip), %rax ; "Swift dynamic cast failed"
0x10636ca25: movq %rax, 0xb4a2c(%rip) ; gCRAnnotations + 8
0x10636ca2c: int3
0x10636ca2d: movq %rdi, %rax
0x10636ca30: popq %rbp
0x10636ca31: retq
0x10636ca32: nopw %cs:(%rax,%rax)
的“雨燕动态转换失败”使我相信,什么是可能使用Objective C只是不可能使用Swift。
有没有人能够完成这项工作?任何援助将不胜感激。图书馆看起来非常好,我真的想用它。
下列规则适用于使用两个斯威夫特和Objective-C台风:
- 在构建时的装配接口用于组装对象实例返回食谱。这包括配置以及任何协作组件。
- 在运行时,程序集接口返回根据这些配方构建的组件。
但是有台风Objective-C和台风斯威夫特之间的一个重要区别:
的Objective-C:
- 在Objective-C,我们建议您装配接口声明返回因为这会提供更好的代码完成并避免不必要的转换。
- 在Objective-C中,只需将其转换为其中一个装配接口,就可以在
TyphoonComponentFactory
前面为您提供任何装配接口“姿势”。
斯威夫特:
- 不幸的是斯威夫特的装配方法必须返回一个类型
AnyObject
。斯威夫特严格的类型检查将不会允许。这显示在Quick Start guide for Swift中。 - 在Swift中,不可能将
TyphoonComponentFactory
投射到其中一个装配接口。但是它仍然有可能给大会注入到一个组件,如下所示:
注射大会:
dynamic func appDelegate() -> AnyObject {
return TyphoonDefinition.withClass(AppDelegate.self) {
(definition) in
//The type of this property can be TyphoonComponentFactory or any of your
//assembly interfaces.
definition.injectProperty("assembly", with: self)
}
}
修复你的崩溃:
因此,通过服从修复崩溃上述条件,请将您的代码更改为以下内容:
将您的代码更改为荷兰国际集团:
public dynamic func loginViewController() -> AnyObject {
//etc
}
解决组件从故事板:
只要使用plist integration您启动台风,包括平时的UILaunchStoryboardName
和UIMainStoryboardFile
,然后台风将确保您的故事板的TyphoonStoryboard
一个实例,这个作品就像一个正常的故事板,添加的行为依赖性是根据组件中的规则注入的。
此功能的文档是here。
以下功能将很快到来:
- 迅速+故事板样品即将出版。 (同时让我们知道你是否仍然无法正常工作。)
- A new approach that avoids the limitation in Swift where
TyphoonComponentFactory
can't be casted to an assembly interface。 (通过应用程序的plist启动台风仍然是一种有效的方法)。
要回答我的问题和其他任何人在那里有同样的问题,请确保您的模块设置,并密切注意控制台日志,也可以说任何错误“未知视图控制器”
在ApplicationAssembly中,不要将视图控制器强制转换为强类型,而应将其保留为文档中引用的AnyObject。
由于台风的作者写出这样一个真棒框架!
谢谢@Vincil!我们很高兴你在享受台风 – 2015-10-30 10:50:30
感谢您的详细解答,非常感谢您花时间回复。现在更有意义。绝对要用台风,好东西! – 2014-11-04 05:40:38
非常欢迎:)感谢您选择台风! – 2014-11-04 09:19:46
@JasperBlues是否已经有一些Swift + Storyboard示例代码可用? – riik 2015-10-19 14:52:02