web-dev-qa-db-fra.com

Comment importer et utiliser Swift Pod Framework dans un projet Objective-C

J'essayais de vérifier la nouvelle configuration du framework CocoaPods pour démarrer quelques pods et je ne parviens pas à utiliser le Swift dans mon projet Objective-C.

Tout d’abord, c’est la version préliminaire de CocoaPods 0.35, vous pouvez en apprendre plus sur son utilisation et son installation ici .

Voici mon Podfile actuel:

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

pod 'MBProgressHUD'
pod 'SLPagingViewSwift'

MBProgressHUD est un indicateur de rotation courant et SLPagingViewSwift est un projet aléatoire que j'ai trouvé en tapant Swift dans la recherche de cocoapods. Voici le ViewController.m Dans mon projet:

#import "ViewController.h"

@import SLPagingViewSwift;
@import MBProgressHUD;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // Works just fine
    MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:hud];
    [hud show:YES];

    // Causes Error -- Won't build
    SLPagingViewSwift *sl = [[SLPagingViewSwift alloc] init];
}

@end

Voici la déclaration SLPagingViewSwift:

class SLPagingViewSwift: UIViewController, UIScrollViewDelegate {

Comme vous pouvez le constater, il hérite de UIViewController. Il ne devrait donc pas être problématique de l’allouer et de l’initialiser. Si j'ajoute le fichier séparément en tant que fichier, le code ci-dessus fonctionne correctement. Je sais que ça marche.

tl; dr

Comment utiliser un cadre pur Swift créé par CocoaPods dans une classe pure Objective-C?

Dépannage

J'ai surtout essayé diverses importations. Apple recommande le @import style ici

enter image description here

Mais j'ai essayé plusieurs autres variétés:

// Compiler Error
#import <SLPagingViewSwift/SLPagingViewSwift.h>

// Builds Fine -- Doesn't Work
#import <SLPagingViewSwift/SLPagingViewSwift-Swift.h>
#import "SLPagingViewSwift-Swift.h"

J'ai également essayé quelques autres Swift bibliothèques de temps en temps pour voir si je pouvais faire quelque chose de clic.

Je ne vois rien sur les problèmes de Cocoapods qui puisse aider à cela, je n'ai également rien trouvé dans leur blog/publication.

Remarque

Si j'ajoute le SLPagingViewSwift.Swift fichier séparément au projet à l’ancienne, cela fonctionne très bien.

66
Logan

Je pense que vous devez déclarer la classe Swift comme publique, sinon elle est traitée comme une classe interne et ne peut être vue que dans le même module, ce qui pourrait expliquer pourquoi l'ajouter à le même projet que les fichiers fonctionnent, mais pas le cadre, mais je pense aussi que le cadre devra peut-être ajouter @objc devant la déclaration de classe pour qu'il soit visible dans les classes d'objectif-c. En lisant le guide Apple de Mix and Match entre Objective C et Swift), il est indiqué que, lorsque vous importez un cadre externe, vous devez vous assurer que le paramètre de génération Defines Module Le cadre que vous importez est défini sur Oui. Avez-vous coché l'une de ces options?

41
Carlos Compean