1

Using Swift with Cocoa and Objective-C (Swift 2.1) ドキュメントの相互運用性に関するセクションの次の段落は、相互運用性のために Objective-C クラスから継承しない Swift クラスを使用する方法があることを示唆しているようです。

Objective-C クラスから派生する Swift クラスを作成すると、クラスとそのメンバー (Objective-C と互換性のあるプロパティ、メソッド、添え字、および初期化子) は、Objective-C から自動的に利用可能になります。場合によっては、Swift API を Objective-C に公開する方法をより細かく制御する必要があります。Swift クラスが Objective-C クラスから継承しない場合、または Objective-C コードに公開されているインターフェイスでシンボルの名前を変更する場合は、 @objc 属性を使用できます。

そして、私は次のことを試みました:

import Foundation

@objc class FooBar {
    @objc var name: String;
    init() {
        name = "Hello World!"
    }
}

しかし、残念ながら、コンパイル エラーが発生します。NSObject から継承したクラスのみを @objc として宣言できます。

私は何かを誤解していますか?

4

1 に答える 1

2

Apple Developer Forums のこのスレッドを見てください。

基本的にあなたの言うことはXcode <= 6で可能でしたが、Xcode 7では削除されました

はい。@objcon Swift ルート クラスは - ルート クラスのようにまったく動作NSObjectせず、生成されたヘッダーと実行時にさまざまな奇妙な動作を引き起こします。Swift クラスのインスタンスを として扱い、Swift クラスのAnyObjectメソッドとプロパティを としてマークし、@objcObjective-C プロトコルに準拠することができます。クラスは、生成されたヘッダーで公開されず、そのメンバーを Objective-C で使用できるようにデフォルト設定されていません。

于 2015-12-25T09:41:02.007 に答える