2014-11-04 98 views
2

注入使用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。

有沒有人能夠完成這項工作?任何援助將不勝感激。圖書館看起來非常好,我真的想用它。

回答

3

下列規則適用於使用兩個斯威夫特和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您啓動颱風,包括平時的UILaunchStoryboardNameUIMainStoryboardFile,然後颱風將確保您的故事板的TyphoonStoryboard一個實例,這個作品就像一個正常的故事板,添加的行爲依賴性是根據組件中的規則注入的。

此功能的文檔是here

以下功能將很快到來:

+2

感謝您的詳細解答,非常感謝您花時間回覆。現在更有意義。絕對要用颱風,好東西! – 2014-11-04 05:40:38

+0

非常歡迎:)感謝您選擇颱風! – 2014-11-04 09:19:46

+0

@JasperBlues是否已經有一些Swift + Storyboard示例代碼可用? – riik 2015-10-19 14:52:02

1

要回答我的問題和其他任何人在那裏有同樣的問題,請確保您的模塊設置,並密切注意控制檯日誌,也可以說任何錯誤「未知視圖控制器」

在ApplicationAssembly中,不要將視圖控制器強制轉換爲強類型,而應將其保留爲文檔中引用的AnyObject。

Interface Builder

由於颱風的作者寫出這樣一個真棒框架!

+1

謝謝@Vincil!我們很高興你在享受颱風 – 2015-10-30 10:50:30

相關問題