Как поместить код AppDelegate Swift в файл AppDelegate Objective-C и заставить его работать? - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь работать с Amazon Web Serivces SDK для iOS под названием AWSAppSync.Я нашел хорошие инструкции для Swift .Я постараюсь сделать этот вопрос более общим для всех проблем моста Obj-c / Swift:

Для файла AppDelegate.Swift есть фрагмент кода.Тем не менее, мой AppDelegate находится в Objective-C.Я поместил его в функцию (называемую awsConfig) в файле Swift, сослался на файл в Bridging-Header.h и вызвал функцию в файле Swift из моего AppDelegate.m:

// 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 '

Почему это не работает?И что может быть лучшим способом решения этой проблемы, если мой обходной путь слишком уродлив?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я обнаружил, что ответом является небольшая ошибка: оказывается, я поместил appDelegate.h вместо appDelegate.m в мой файл заголовка моста. После изменения это работает. Возможно, лучше было бы перевести код Swift на цель C, но это проще, если вы не обладаете таким же опытом в обоих языках, как я.

0 голосов
/ 28 марта 2019

это может быть связано с версией, с которой вы сейчас работаете, поскольку эта проблема может быть связана с проблемой версий, которые вы используете.Поэтому сначала попробуйте использовать другую версию, поскольку это случилось со мной один раз, и я просто использовал старую версию, поскольку в компиляторе есть небольшие изменения, поэтому, если вы можете попробовать разные версии, а затем дайте мне знать и обязательно составьте отчет оверсии, которые вы пробовали, но не удалось.

...