Swift 中的台风 defaultAssembly()
Typhoon defaultAssembly() in Swift
我在为我的 swift 应用程序实现 defaultAssembly() 时遇到问题。我需要直接从遗留代码访问依赖项之一。
应用程序完全集成台风 - 具有 Plist 初始化和故事板。
第一个问题是将程序集设置为默认程序集,因为它是从 plist 自动创建的。最后我只是在激活后将其设置为默认值。我不知道这是否是正确的方法,但它似乎有效。
public override func activate() -> AppAssembly! {
var instance = super.activate() as! AppAssembly
instance.makeDefault()
return instance
}
真正的问题是当我这样检索它时:
var assembly = TyphoonAssembly.defaultAssembly() as! AppAssembly
我收到一个错误:
Could not cast value of type 'TyphoonBlockComponentFactory' (0x10f78bc40) to 'AppAssembly'
我应该如何取回它?还是我把默认程序集设置错了?
谢谢
托马斯
你是对的 - 这不是使用 plist 集成创建默认程序集的正确方法。
与其制作如上所示的 new 程序集,不如将 plist 中声明的程序集设为默认程序集。为此:
public dynamic func appDelegate() -> AnyObject {
return TyphoonDefinition.withClass(AppDelegate.self) {
(definition) in
definition.injectProperty("assembly", with: self)
}
}
然后在 AppDelegate 中:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.assembly.makeDefault()
}
不幸的是,这不会解决您的强制转换问题 - 看起来 Swift 类型系统正在阻碍事情 - 这已被记录为错误。同时,请使用:
var factory = TyphoonComponentFactory.defaultFactory()
var something = factory.componentForKey("someKey")
。 . .其中 key 是任何程序集中的方法名称。
我在为我的 swift 应用程序实现 defaultAssembly() 时遇到问题。我需要直接从遗留代码访问依赖项之一。
应用程序完全集成台风 - 具有 Plist 初始化和故事板。
第一个问题是将程序集设置为默认程序集,因为它是从 plist 自动创建的。最后我只是在激活后将其设置为默认值。我不知道这是否是正确的方法,但它似乎有效。
public override func activate() -> AppAssembly! {
var instance = super.activate() as! AppAssembly
instance.makeDefault()
return instance
}
真正的问题是当我这样检索它时:
var assembly = TyphoonAssembly.defaultAssembly() as! AppAssembly
我收到一个错误:
Could not cast value of type 'TyphoonBlockComponentFactory' (0x10f78bc40) to 'AppAssembly'
我应该如何取回它?还是我把默认程序集设置错了?
谢谢 托马斯
你是对的 - 这不是使用 plist 集成创建默认程序集的正确方法。
与其制作如上所示的 new 程序集,不如将 plist 中声明的程序集设为默认程序集。为此:
public dynamic func appDelegate() -> AnyObject {
return TyphoonDefinition.withClass(AppDelegate.self) {
(definition) in
definition.injectProperty("assembly", with: self)
}
}
然后在 AppDelegate 中:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.assembly.makeDefault()
}
不幸的是,这不会解决您的强制转换问题 - 看起来 Swift 类型系统正在阻碍事情 - 这已被记录为错误。同时,请使用:
var factory = TyphoonComponentFactory.defaultFactory()
var something = factory.componentForKey("someKey")
。 . .其中 key 是任何程序集中的方法名称。