我正在尝试使用名为 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 会是一个更好的选择,但如果你不像我那样精通这两种语言,这会更容易。