Преобразование функции Swift в Objective C и использование возвращаемого значения в Swift - PullRequest
0 голосов
/ 05 июля 2018

Мне нужно написать эти две Swift функции в Objective-C, а затем вызвать возвращаемые значения в Swift Как мне это сделать?

Также, где мне нужно поместить их в мои AppDelegate?

Извините, это может быть очень легко, но у меня нет опыта использования Objective-C.

Заранее спасибо!

Функции для преобразования:

class func getAppDelegate() -> AppDelegate {
    return UIApplication.shared.delegate as! AppDelegate
}

func getDocDir() -> String {
    return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
}

AppDelegate.m:

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate


- (BOOL)application:(UIApplication*)application 
 didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{

}
@end

AppDelegate.h:

#import <Cordova/CDVViewController.h>
#import <Cordova/CDVAppDelegate.h>

@interface AppDelegate : CDVAppDelegate {}


@end

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Вот ваш класс AppDelegate, написанный с использованием target-c, включая ваш метод Swift. Но нам нужно знать больше деталей, чтобы помочь.

AppDelegate.h

#import <Cordova/CDVViewController.h>
#import <Cordova/CDVAppDelegate.h>

@interface AppDelegate : CDVAppDelegate {}

+ (id)getAppDelegate;
- (NSString*)getDocDir;

@end

AppDelegate.m

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate


- (BOOL)application:(UIApplication*)application 
 didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    return YES;
}

+ (id)getAppDelegate {
    return self;
}

- (NSString*)getDocDir {
    return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
}
@end
0 голосов
/ 05 июля 2018

Пост Али, кажется, правильный ответ на то, что вы спросили:

написать эти две функции Swift в Objective-C и затем вызвать возвращаемые значения в Swift

Но если вы имеете в виду, что хотите вызывать два метода только из своего кода Swift, почему бы вам не определить его в расширении.

AppDelegate + .swift:

import UIKit

extension AppDelegate {
    class func getAppDelegate() -> AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    }

    func getDocDir() -> String {
        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    }

}

Конечно, вам нужно #import "AppDelegate.h" в вашем "...- Bridging-Header.h".

Вы можете использовать их, как были в вашем AppDelegate.

0 голосов
/ 05 июля 2018

Вам нужен соединительный заголовок и все. Импортируйте ваш AppDelegate в файл заголовка моста. Заголовочный файл моста представляет собой интерфейс для обмена кодом от цели C к Swift. Поэтому, когда вы добавляете любой файл swift в целевой проект C, он попросит вас добавить этот заголовочный файл. например ProjectName-Bridging-header.h. Если его там нет, проверьте, как его создать вручную здесь .

Затем импортируйте все необходимые файлы объектов C в этом заголовке как:

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "Appdelegate.h"

Затем вы можете добавить упомянутые функции в сам файл swift.

Надеюсь, это поможет ...

...