2017-03-08 68 views
0

該代碼可以使用颱風依賴注入庫(的OBJ-C)在SWIFT 2.3但在夫特3不會:颱風依賴注入和夫特3:的appDelegate不是AnyObject

的AppDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    var rootViewController: RootViewController? 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 

     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = self.rootViewController 
     self.window?.makeKeyAndVisible() 

     return true 
    } 
    ... 
} 

應用大會:

public class ApplicationAssembly: TyphoonAssembly { 

     public dynamic func config() -> AnyObject { 
      return TyphoonDefinition.withConfigName("Configuration.plist") 
     } 

     public dynamic func appDelegate() -> AnyObject { 
      return TyphoonDefinition.withClass(AppDelegate.self) { 
       (definition) in 

       definition!.injectProperty(#selector(ApplicationAssembly.rootViewController), with: self.rootViewController()) 
      } 
     } 
... 
} 

但是下面的錯誤是顯示終端ayed在ApplicationAssembly爲有望重返「AnyObject」任何斯威夫特3檔: 「否‘withClass’候選人產生預期的語境結果類型‘AnyObject’

也許任何人都見識到了對象 - 的不兼容性颱風代碼基地與Swift 3?

Screen capture of error line

+0

你能不能用明確的轉換嘗試 –

+0

明確的轉換似乎不兼容: '公共動態FUNC mainUIController() - > AnyObject { 回報TyphoonDefinition.withClass(MainUIViewController.self)爲! AnyObject { (定義)在 ...' – XyrisKenn

回答

0

您可能希望從AnyObject切換返回類型Any

withClass函數返回在Objective-C的ID類型, see the source code

+ (id)withClass:(Class)clazz block:(TyphoonBlockDefinitionInitializerBlock)block; 

用於夫特2被映射到AnyObject,但在夫特3它映射到Any增加的靈活性的id類型。 You can read more about this change here.

+0

這有效。謝謝。 – XyrisKenn