簡體   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