台风依赖注入和夫特3:的appDelegate不是AnyObject
问题描述:
该代码可以使用台风依赖注入库(的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?
答
您可能希望从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
你能不能用明确的转换尝试 –
明确的转换似乎不兼容: '公共动态FUNC mainUIController() - > AnyObject { 回报TyphoonDefinition.withClass(MainUIViewController.self)为! AnyObject { (定义)在 ...' – XyrisKenn