繁体   English   中英

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

[英]How do I put AppDelegate Swift code into Objective-C AppDelegate file and make it work?

我正在尝试使用名为AWSAppSync的适用于iOS的Amazon Web Serivces SDK。 我找到了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放在我的bridging-header文件中。 改变它后,它的工作原理。 将Swift代码翻译成目标C可能是一个更好的选择,但如果你不像我这样熟练使用这两种语言,这就更容易了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM