2 votes

Importer le framework Swift vers Obj-C

J'ai un cadre qui est écrit en Swift comme ceci.

import Foundation
import WebKit
import ObjectiveC

public extension WKWebView {

    public func someFunc(_ completionHandler:@escaping (_ capturedImage: UIImage?) -> Void) {
        //Some code
    }
}

Lorsque je construis les frameworks et que j'importe vers le code Objective-C qui utilise Cocoapods pour le gestionnaire de dépendances. Je ne peux pas appeler la fonction someFunc ci-dessus. L'erreur dit ceci :

Aucune @interface visible pour 'WKWebView' ne déclare le sélecteur 'someFunc'.

Voici comment j'implémente le framework Swift en Objective-C :

#import <Foundation/Foundation.h>
#import <ProjectName-umbrella.h>
@implementation CapturerDefault
- (void)captureWebViewScreenWith:(UIView *)containerView
            andCompletionHandler:(void (^)(UIImage *))completion {
    WKWebView *webView = [self findWebViewInViewController:containerView];

    [webView someFunc: resultImage] //The error show here.
    }
}

Qu'est-ce qui ne va pas ? J'ai raté quelque chose ?

1voto

Arun Points 162

J'ai essayé les étapes suivantes et cela fonctionne pour moi :

  1. N'importez pas le fichier swift dans votre fichier objc comme : #import "ExampleFile.swift" mais utilisez #import "ProjectName-Swift.h".
  2. Assurez-vous d'utiliser les déclarations @objc dans votre code swift que vous voulez importer dans objc.

Dossier Swift :

import WebKit

extension WKWebView {
    @objc public func someFunc() {

    }
}

Fichier Objective C :

#import "ViewController.h"
#import "Sample-Swift.h"
#import <WebKit/WebKit.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    WKWebView *wbView = [[WKWebView alloc]init];

    [wbView someFunc];
}

Crédits à : "Attendu ';' après le déclarateur de niveau supérieur" sous Swift

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X