サーチ…


SwiftでのObjective-Cクラスの使用

既存のクラスを使用する場合は、 ステップ2を実行してからステップ5に進みます。 (場合によっては、明示的な#import <Foundation/Foundation.hを古いObjCファイルに追加する必要がありました)

ステップ1:Objective-C実装の追加 - .m

クラスに.mファイルを追加し、 CustomObject.mという名前を付けCustomObject.m

手順2:ブリッジヘッダーを追加する

.mファイルを追加すると、次のようなプロンプトが表示されます。

ここに画像の説明を入力

はいをクリックしてください!

プロンプトが表示されなかったり、間違ってブリッジヘッダーを削除した場合は、新しい.hファイルをプロジェクトに追加し、その名前を<#YourProjectName#>-Bridging-Header.h

特にObjCフレームワークで作業する場合、Objective-Cクラスを明示的に追加せず、Xcodeでリンカーを見つけることができない場合があります。この場合、上記のような名前の.hファイルを作成し、そのパスをターゲットのプロジェクト設定にリンクするようにします。

ここに画像の説明を入力

注意

$(SRCROOT)マクロを使用してプロジェクトをリンクするのがベストプラクティスです。プロジェクトを移動したり、リモートリポジトリを使用して他のプロジェクトと作業しても機能します。 $(SRCROOT)は.xcodeprojファイルを含むディレクトリと考えることができます。次のようになります。

$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

ステップ3:Objective-Cヘッダーの追加 - .h

別の.hファイルを追加し、 CustomObject.hという名前を付けCustomObject.h

ステップ4:Objective-Cクラスを構築する

CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

手順5:ブリッジヘッダーにクラスを追加する

YourProject-Bridging-Header.h

#import "CustomObject.h"

ステップ6:オブジェクトを使用する

SomeSwiftFile.swift

var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

明示的にインポートする必要はありません。これが、ブリッジヘッダーの目的です。

Objective-CでのSwiftクラスの使用

ステップ1:新しいスウィフトクラスを作成する

.swiftファイルをプロジェクトに追加し、 .swiftという名前を付けMySwiftObject.swift

MySwiftObject.swift

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val"

    init() {}

    func someFunction(someArg:AnyObject) -> String {
        var returnVal = "You sent me \(someArg)"
        return returnVal
    }

}

手順2:SwjファイルをObjCクラスにインポートする

SomeRandomClass.m

#import "<#YourProjectName#>-Swift.h"

ファイル: <#YourProjectName#>-Swift.hは、あなたがそれを見ることができない場合でも、あなたのプロジェクトにすでに自動的に作成されているはずです。

ステップ3:クラスを使用する

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

注意:

1. CodeCompletionは、私が望むように正確に動作していませんでした。私のシステムでは、「cmd + r」というクイックビルドを実行すると、SwiftがObjcコードの一部を見つけやすくなり、その逆も同様です。

2. .swiftファイルを古いプロジェクトに追加してエラーが発生した場合: dyld: Library not loaded: @rpath/libswift_stdlib_core.dylibXcodeを完全に再起動してみてください

3. Objective-CではSwift 2.0の後に@objcプレフィックスを使用して純粋なSwiftクラスを使用することは元々可能でしたが、これはもはや不可能です。元の説明については、編集履歴を参照してください。将来のSwiftバージョンでこの機能を再び有効にすると、それに応じて回答が更新されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow