簡體   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