web-dev-qa-db-ja.com

Objective-CプロジェクトでSwift Podフレームワークをインポートして使用する方法

私はCocoaPodsの新しいフレームワークのセットアップをチェックアウトして、いくつかのPodを取得しようとしていますが、Objective-CプロジェクトでSwiftを使用するのに問題があります。

まず最初に、これはCocoaPodsプレリリース0.35です。使用方法とインストール方法についてはこちらをご覧ください here

これが私の現在のポッドファイルです:

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

platform :ios, '8.0'

pod 'MBProgressHUD'
pod 'SLPagingViewSwift'

MBProgressHUDは一般的な回転インジケーターで、SLPagingViewSwiftはcocoapods検索にSwiftと入力して見つけたランダムなプロジェクトです。これが私のプロジェクトのViewController.mです:

#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

SLPagingViewSwift宣言は次のとおりです。

class SLPagingViewSwift: UIViewController, UIScrollViewDelegate {

ご覧のとおり、UIViewControllerを継承しているため、割り当てて初期化するだけで問題ありません。ファイルをファイルとして個別に追加すると、上記のコードは問題なく実行されます。私はそれが機能することを知っています。

tl; dr

CocoaPodsによって作成された純粋なSwiftフレームワークを純粋なObjective-Cクラスで使用するにはどうすればよいですか?

トラブルシューティング

ほとんどの場合、さまざまなインポートを試みてきました。 Appleは@importスタイルを推奨 here

enter image description here

しかし、私は他の複数の品種を試してきました:

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

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

また、他にもいくつかのSwiftライブラリを試して、何かクリックできるかどうかを確認しています。

Cocoapodsの問題でこれを支援できるものは何も見当たりません。また、彼らのブログやリリースのものにも何も見つかりませんでした。

注意

SLPagingViewSwift.Swiftファイルを旧式の方法でプロジェクトに個別に追加すると、問題なく機能します。

66
Logan

Swiftクラスをpublicとして宣言する必要があると思います。そうしないと、内部クラスとして扱われ、同じモジュール内でのみ表示されます。これが同じプロジェクトに追加する理由です。ファイルとしては機能しますが、フレームワークとしては機能しません。私が思い浮かぶ他のことは、フレームワークがクラ​​ス宣言の前に@objcを追加して、objective-cクラス内で見えるようにする必要があるかもしれないことです。また、Appleのガイドの Mix and Match Objective CとSwiftを読んで、外部フレームワークをインポートするとき、フレームワークのDefines Moduleビルド設定を確認する必要があると書かれています're importingはYesに設定されています。これらのオプションのいずれかで確認しましたか?

41
Carlos Compean