如何将 AppDelegate Swift 代码放入 Objective-C AppDelegate 文件中并使其正常工



我正在尝试使用名为 AWSAppSync 的 Amazon Web Serivces SDK for iOS。我找到了关于 Swift 的好说明。我将尝试使这个问题对所有 Obj-c/Swift 桥接问题更通用:

有一个用于 AppDelegate.Swift 文件的代码片段。但是,我的AppDelegate是Objective-C。我已经把它放到一个 Swift 文件中的函数(称为 awsConfig(中,在 Bridging-Header.h 中引用了该文件,并从我的 AppDelegate.m 调用了 Swift 文件中的函数:

// AppDelegate.m
#import "<ProductModuleName>-Swift.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    appsyncer *syncClass = [appsyncer new];
    [syncClass awsConfig];
    return YES;
}

这是 Swift 文件中的代码片段。

// SwiftAppDelegateExtension.Swift 
var appSyncClient: AWSAppSyncClient?
    do {
        // You can choose the directory in which AppSync stores its persistent cache databases
        let cacheConfiguration = try AWSAppSyncCacheConfiguration()
        // AppSync configuration & client initialization
        let appSyncServiceConfig = try AWSAppSyncServiceConfig()
        let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: appSyncServiceConfig,
                                                              cacheConfiguration: cacheConfiguration)
        appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
    } catch {
        print("Error initializing appsync client. (error)")
    }

当我想在另一个 Swift 文件中使用它时,如下所示:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appSyncClient = appDelegate.appSyncClient

我收到错误:

(!类型为"AppDelegate"的值没有成员"appSyncClient">

为什么这不起作用?如果我的解决方法太难看,有什么更好的方法来解决这个问题?

这可能是

因为您当前使用的版本,因为此问题可能与您正在使用的版本的问题有关。因此,请先尝试使用不同的版本,因为这曾经发生在我身上,我只是使用了旧版本,因为编译器略有变化,因此如果您可以尝试不同的版本,然后让我知道并确保报告您尝试的版本失败。

我发现答案是一个轻微的错误:原来我在我的桥接头文件中放了appDelegate.h而不是appDelegate.m。更改后它可以工作。也许将 Swift 代码翻译成目标 C 会是一个更好的选择,但如果你不像我那样精通这两种语言,这会更容易。

最新更新