繁体   English   中英

台风依赖注入和Swift 3:Appdelegate不是AnyObject

[英]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的不兼容性有深刻的了解吗?

错误行的屏幕截图

您可能需要将返回类型从AnyObjectAny

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM