私は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
しかし、私は他の複数の品種を試してきました:
// Compiler Error
#import <SLPagingViewSwift/SLPagingViewSwift.h>
// Builds Fine -- Doesn't Work
#import <SLPagingViewSwift/SLPagingViewSwift-Swift.h>
#import "SLPagingViewSwift-Swift.h"
また、他にもいくつかのSwiftライブラリを試して、何かクリックできるかどうかを確認しています。
Cocoapodsの問題でこれを支援できるものは何も見当たりません。また、彼らのブログやリリースのものにも何も見つかりませんでした。
注意
SLPagingViewSwift.Swift
ファイルを旧式の方法でプロジェクトに個別に追加すると、問題なく機能します。
Swiftクラスをpublicとして宣言する必要があると思います。そうしないと、内部クラスとして扱われ、同じモジュール内でのみ表示されます。これが同じプロジェクトに追加する理由です。ファイルとしては機能しますが、フレームワークとしては機能しません。私が思い浮かぶ他のことは、フレームワークがクラス宣言の前に@objcを追加して、objective-cクラス内で見えるようにする必要があるかもしれないことです。また、Appleのガイドの Mix and Match Objective CとSwiftを読んで、外部フレームワークをインポートするとき、フレームワークのDefines Moduleビルド設定を確認する必要があると書かれています're importingはYesに設定されています。これらのオプションのいずれかで確認しましたか?