18

ビュー コントローラーで Swift 拡張機能を書き始めました。したがって、現在3つのファイルがあります。

私のヘッダーファイルViewController.h

@interface MyViewController : UIViewController

@end

私の Obj-C 実装ファイルViewController.m:

@interface MyViewController () <UIScrollViewDelegate>
@property (strong, nonatomic) UIScrollView *scrollView;
@end

@implementation MyViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.scrollView = [[UIScrollView alloc] init];
    [self customiseScrollView]; //This is Swift method called from Obj-C file
}

@end

そして最後に、ViewController.swift:

extension MyViewController {

    func customiseScrollView() {

    }
}

私の質問は、Swift 実装ファイルから Obj-C プロパティにアクセスすることは可能ですか? それを参照するたびに、エラーが発生しました:

Value of type 'MyViewController' has no member 'scrollView'

ボーナス 1: Swift コンポーネントが .m のデリゲートも認識できるかどうかを誰かが明確にすることもできます。(明確にするscrollView.delegate = selfために、Swift ファイルは .m ファイルが UIScrollViewDelegate であることを認識しないため、Swift で実行するとコンパイル エラーになります)。

ボーナス 2: Swift 拡張ファイルは、対応する .m から宣言された Obj-C メソッドを呼び出すことができますか?

4

5 に答える 5

14

拡張機能からプライベート プロパティにアクセスすることはできないと思います。scrollView プロパティは .h ではなく .m ファイルにあります。これは、プライベートであり、拡張ファイルからは見えないことを意味します。

解決策:移動

@property (strong, nonatomic) UIScrollView *scrollView;

ヘッダーファイルに。

于 2015-10-22T07:56:17.257 に答える
-1

あなたはできる。必要なのは、ブリッジング オブジェクティブ C ヘッダーを作成することだけです。

Apple ドキュメントごと:

Swift コードと同じアプリ ターゲットに一連の Objective-C ファイルをインポートするには、Objective-C ブリッジ ヘッダーを使用してこれらのファイルを Swift に公開します。Swift ファイルを既存の Objective-C アプリに追加するとき、または Objective-C ファイルを既存の Swift アプリに追加するときに、Xcode はこのヘッダー ファイルの作成を提案します。

于 2015-10-22T07:51:49.723 に答える
-1

Bridging-Header ファイルを作成し、後で ObjC ファイルをインポートするだけです。

#import <objectivec.h>

後で迅速なファイルで:

var a = objectivec()
a.method_from_those_file

詳細については、ここから Apple ドキュメントを参照してください。

于 2015-10-22T07:51:50.050 に答える