3

迅速なプロジェクトで目的の c で記述された SDK を採用しようとしています。SDK を初期化する目的の c の方法は次のとおりです。

@implementation ViewController
nokeSDK *nokelock;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //INITIALIZE NOKE SDK
    nokelock = [[nokeSDK alloc] init];
    nokelock->cmd = [[nokecommand alloc] init];

Swift の矢印演算子に相当するものがあるとは思わないので、まだ初期化することは可能ですか? 彼の特定の主題に関する情報を見つけることができないようです.

4

1 に答える 1

1

Objective-C では、プロパティはアクセサ メソッドの単なる構文糖衣です。通常の場合のように、これらがインスタンス変数のフロントである場合、適切なプライバシー アクセスを使用して、アクセサー メソッドをバイパスし (または最初からアクセサー メソッドを使用しないで)、インスタンス変数を直接取得/設定できます。それがあなたのコードがしていることです。

しかし、Swift はその区別をしません。Swift では、型宣言の最上位で宣言された変数はプロパティです。舞台裏では、格納されたプロパティにはアクセサ メソッドがあり、プロパティを取得/設定するときにそれらを自動的に通過します。取得/設定する個別のインスタンス変数はありません。

私が何を意味するかを理解するために、インターフェースが次のような Thing クラスを持つハイブリッド Swift / Objective-C アプリを作成します。

@interface Thing : NSObject {
    @public
    NSString* s;
}

生成されたインターフェイスを作成します。Swift ではsどこにも見られないことがわかります。

したがって、おそらくコードを書き直すにはcmd、プロパティに変換するか、少なくともセッター メソッドを提供する必要があります。そうしないと、Swift は Objective-Ccmdインスタンス変数を設定できなくなります。もちろん、nokeSDKSwift で書き直すことも自分次第であれば、好きなことをできるようになったので、問題は解決しました。

于 2016-02-29T02:45:24.750 に答える