2015-09-06 38 views
4

我有問題實現defaultAssembly()爲我的swift應用程序。我需要直接從遺留代碼訪問其中一個依賴關係。颱風defaultAssembly()在Swift

該應用程序完全是颱風整合 - 與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' 

我應該如何再找回?或者我設置了默認的程序集錯誤?

感謝 托馬斯

回答

3

你說得對 - 這是不使用的plist整合,使默認組件的正確方法。

而不作組件如上圖所示,把在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() 
} 

但不幸的是,這會不會採用鑄造解決您的問題 - 它看起來像雨燕系統是阻礙的東西 - 這已經記錄爲一個錯誤。在此期間,請使用:

var factory = TyphoonComponentFactory.defaultFactory() 
var something = factory.componentForKey("someKey") 

。 。 。其中key是任何程序集中方法的名稱。

+0

錯誤報告:https://github.com/appsquickly/Typhoon/issues/409 –

+0

謝謝,解決了這個問題。 –