[英]Typhoon Dependency Injection and Swift 3: Appdelegate isn't AnyObject
該代碼在Swift 2.3中可與台風依賴注入庫(Obj-C)一起使用,但在Swift 3中則無法使用:
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())
}
}
...
}
但是,對於任何預期返回“ AnyObject”的Swift 3文件,ApplicationAssembly中都會顯示以下錯誤: “沒有'withClass'候選者不會產生預期的上下文結果類型'AnyObject'
可能有人對Obj-c Typhoon代碼庫與Swift 3的不兼容性有深刻的了解嗎?
您可能需要將返回類型從AnyObject
為Any
。
withClass
函數在Objective-C中返回一個id類型, 請參見源代碼 :
+ (id)withClass:(Class)clazz block:(TyphoonBlockDefinitionInitializerBlock)block;
id
類型曾經在Swift 2中映射到AnyObject
,但是在Swift 3中,它被映射到Any
以提高靈活性。 您可以在此處閱讀有關此更改的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.