如何将AppDelegate Swift代码放入Objective-C AppDelegate文件并使其工作?

问题描述 投票:0回答:2

我正在尝试使用名为AWS AppSync的适用于iOS的Amazon Web Serivces SDK。我找到了qazxsw poi。我会尝试让所有Obj-c / Swift桥接问题更加通用:

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

good instructions for Swift

这是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)")
    }

我收到错误:

(!)'AppDelegate'类型的值没有成员'appSyncClient'

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

ios swift appdelegate bridging-header
2个回答
0
投票

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


0
投票

我发现答案是一个小错误:原来我把appDelegate.h而不是appDelegate.m放在我的bridging-header文件中。改变它后,它的工作原理。将Swift代码翻译成目标C可能是一个更好的选择,但如果你不像我这样熟练使用这两种语言,这就更容易了。

© www.soinside.com 2019 - 2024. All rights reserved.