我正在尝试使用适用于iOS的Amazon Web Serivces SDK(称为AWSAppSync)。我找到了good instructions for 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'
为什么这行不通?如果我的解决方法太丑陋,那么解决这个问题的更好方法是什么?
答案 0 :(得分:0)
这可能是由于您当前正在使用的版本,因为此问题可能与您使用的版本有关。因此,请尝试先使用其他版本,因为这曾经发生在我身上,而我只是使用了旧版本,因为编译器稍有更改,因此,如果您可以尝试使用其他版本,然后让我知道并确保对报告进行报告。您尝试的版本失败了。
答案 1 :(得分:0)
我发现答案是一个小错误:原来我在桥接头文件中放了appDelegate.h而不是appDelegate.m。更改后可以正常工作。将Swift代码转换为目标C可能是一个更好的选择,但是如果您不像我这样精通两种语言,这会更容易。