1. ホーム
  2. objective-c

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

2023-07-31 23:38:23

質問

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

まず最初に、これはCocoaPods prerelease 0.35で、使い方やインストール方法については ここで .

これが私の現在のPodfileです。

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 Frameworkを純粋なObjective-Cのクラスで使用するにはどうしたらよいでしょうか?

トラブルシューティング

主に、いろいろなインポートを試しています。 Appleが推奨するのは @import スタイル ここで

しかし、私は他の複数の品種を試しています。

// 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のガイドを読むと ミックスアンドマッチ を読むと、外部のフレームワークをインポートするときは、インポートするフレームワークのDefines Module build設定がYesに設定されていることを確認する必要があると書かれています。これらのオプションのいずれかを確認しましたか?