Objective-Cメソッドでアクセスできるようにカスタムオブジェクト(Swiftのクラス)を保存します

user1904273

私はSwift(私が学んでいる)で次のように特定の値を保持するために使用するクラスを作成しました:

@objc public class Book: NSObject {
    var title: String = ""
    var date: Date = Date()
    var sku: Float = 0
}

このクラスを、Objective-Cクラスからアクセスできるプロパティと同等のものに格納したいと思います。

クラスが次のように使用されるViewControllerで変数を作成してみました。

var lastBookViewed = Book()

ただし、次のコードを使用してオブジェクトをプロパティに保存しようとすると、エラーが発生します。

//create instance of book
let myBook = Book()
//gather information about book
lastBookViewed = myBook //THROWS COMPILER ERROR 'Use of Unresolved Identifier lastBookViewed

これを行う方法はありますか?

簡単であれば、Objective-Cファイルのプロパティにオブジェクトを保存することもできますが、これまでのところ、Swiftで作成されたBookクラスをObjective-Cファイルで認識できませんでした。推奨。

編集

次の構文を使用して、同じSwiftファイルの別のSwiftクラス(View Controllerクラス)にカスタムSwiftオブジェクトを格納するためのプロパティまたは変数を作成しようとすると、次のようになります。

var lastBookViewed: Book

コンパイラは、VCクラスに「yourVCにはイニシャライザがありません」という警告を出します。

興奮した微生物

プロジェクトの一般設定に移動します。アプリの適切なターゲットを選択します。「ビルド設定」に移動し、デフォルトの「基本」ではなく「すべて」に切り替えます。ここで「パッケージング」セクションを検索します。「いいえ」を「はい」に変更して、「モジュールの定義」をオンにします。

画面1

これをオンにすると、objective-cファイル内でswiftクラスを使用できるようになります。

  1. 「ビルド設定」を終了する前に、「パッケージング」セクションで「製品モジュール名」を探してください。これは重要ですので、必ず「製品モジュール名」をメモして正確にコピーしてください。

  2. 次に、Swiftクラスにアクセスできるようにしたいobjective-cクラスに移動します。このクラスの実装または.mファイルで、次のようなヘッダーをインポートします。

#import "MyProjectModuleName-Swift.h"

ここで、インポートのファイル名は、ビルド設定からの正確なプロジェクトモジュール名である必要があります。swiftクラスにアクセスするobjective-cファイルには、このインポートを含める必要があります。

  1. ここで、swiftクラスを使用するときに発生する可能性のある1つの潜在的な問題について言及する価値があります。Objective-cはトップレベルのswiftクラスを読み取ることができません。したがって、swiftクラスのメソッドまたは変数を直接使用する場合、それは認識されません。この問題に対する簡単な解決策が1つあります。それはあなたのクラスを作ることですpublic
 @objc public class myClass

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Objective-CクラスからオブジェクトのSwift関数にアクセスします

分類Dev

Objective-c:ディスクに保存してサーバーに送信するためにXMLでカスタムクラスオブジェクトをシリアル化する

分類Dev

Objective C:IDインスペクターのカスタムクラスは、そのクラスの新しいオブジェクトを作成しますか?

分類Dev

Objective-cで静的Swiftメソッドを使用する場合の「セレクターの既知のクラスメソッドがありません」

分類Dev

Objective-C-オブジェクトがメソッドIMPをそれ自体であるかのように直接実行する方法はありますか?

分類Dev

Objective-Cのメソッド引数にプログラムでアクセスする

分類Dev

Objective Cオブジェクトインスタンスを文字列としてエンコードするにはどうすればよいですか?

分類Dev

Objective-Cでスレッドセーフな静的オブジェクトを初期化して使用する

分類Dev

クラスオブジェクトを初期化できません:objective-C

分類Dev

Objective-Cオブジェクトはインスタンスメソッドの独自のコピーを取得しますか?

分類Dev

Objective-Cのプロキシオブジェクトでセレクターをテストする方法は?

分類Dev

iOSとwatchOSのメソッドが異なる同じクラスオブジェクト(Objective-C)

分類Dev

クラスを必要とするObjective-CメソッドにSwiftクラスを渡すにはどうすればよいですか?

分類Dev

Swiftで特定のObjective-Cクラスメソッドを呼び出すことができません

分類Dev

std:vectorを使用してObjective-cクラスをSwiftクラスで利用できるようにする方法

分類Dev

Objective-C非ローカルオブジェクトのアドレスを__autoreleasingパラメータに渡す

分類Dev

Objective Cで#defineを使用し、swiftクラスでアクセスします

分類Dev

Objective-CでのSwiftオブジェクトクラスの使用

分類Dev

Objective-Cのオブジェクトのリストを継承するクラスを作成します

分類Dev

NSUserDefaultカスタムオブジェクトエラー-「ArrayはObjective-Cからブリッジできません」

分類Dev

オブジェクトがObjective-Cにあるクラスをテストするにはどうすればよいですか?

分類Dev

カスタムオブジェクトのNString値がセグエ後に失われる(Objective C)

分類Dev

Objective-C / XCodeで、コマンドラインツールプロジェクト内のプロトコルを定義するカスタムCocoaフレームワークを使用するにはどうすればよいですか?

分類Dev

Objective-C:別のクラスのメソッドをインスタンス化できません

分類Dev

Objective-Cで2番目のオブジェクトをインスタンス化したオブジェクトへの参照を取得するにはどうすればよいですか?

分類Dev

クロスプラットフォームのC ++タッチマネージャーを作成します。C ++関連コードでObjective-cオブジェクトを渡す

分類Dev

Objective-CからSwift 4クラスにアクセスできない:「タイプのオブジェクトにプロパティが見つかりません」

分類Dev

Objective-CからSwift 4クラスにアクセスできない:「タイプのオブジェクトにプロパティが見つかりません」

分類Dev

Objective-C addObject はオブジェクトをすべての配列インデックスに入れるようです

Related 関連記事

  1. 1

    Objective-CクラスからオブジェクトのSwift関数にアクセスします

  2. 2

    Objective-c:ディスクに保存してサーバーに送信するためにXMLでカスタムクラスオブジェクトをシリアル化する

  3. 3

    Objective C:IDインスペクターのカスタムクラスは、そのクラスの新しいオブジェクトを作成しますか?

  4. 4

    Objective-cで静的Swiftメソッドを使用する場合の「セレクターの既知のクラスメソッドがありません」

  5. 5

    Objective-C-オブジェクトがメソッドIMPをそれ自体であるかのように直接実行する方法はありますか?

  6. 6

    Objective-Cのメソッド引数にプログラムでアクセスする

  7. 7

    Objective Cオブジェクトインスタンスを文字列としてエンコードするにはどうすればよいですか?

  8. 8

    Objective-Cでスレッドセーフな静的オブジェクトを初期化して使用する

  9. 9

    クラスオブジェクトを初期化できません:objective-C

  10. 10

    Objective-Cオブジェクトはインスタンスメソッドの独自のコピーを取得しますか?

  11. 11

    Objective-Cのプロキシオブジェクトでセレクターをテストする方法は?

  12. 12

    iOSとwatchOSのメソッドが異なる同じクラスオブジェクト(Objective-C)

  13. 13

    クラスを必要とするObjective-CメソッドにSwiftクラスを渡すにはどうすればよいですか?

  14. 14

    Swiftで特定のObjective-Cクラスメソッドを呼び出すことができません

  15. 15

    std:vectorを使用してObjective-cクラスをSwiftクラスで利用できるようにする方法

  16. 16

    Objective-C非ローカルオブジェクトのアドレスを__autoreleasingパラメータに渡す

  17. 17

    Objective Cで#defineを使用し、swiftクラスでアクセスします

  18. 18

    Objective-CでのSwiftオブジェクトクラスの使用

  19. 19

    Objective-Cのオブジェクトのリストを継承するクラスを作成します

  20. 20

    NSUserDefaultカスタムオブジェクトエラー-「ArrayはObjective-Cからブリッジできません」

  21. 21

    オブジェクトがObjective-Cにあるクラスをテストするにはどうすればよいですか?

  22. 22

    カスタムオブジェクトのNString値がセグエ後に失われる(Objective C)

  23. 23

    Objective-C / XCodeで、コマンドラインツールプロジェクト内のプロトコルを定義するカスタムCocoaフレームワークを使用するにはどうすればよいですか?

  24. 24

    Objective-C:別のクラスのメソッドをインスタンス化できません

  25. 25

    Objective-Cで2番目のオブジェクトをインスタンス化したオブジェクトへの参照を取得するにはどうすればよいですか?

  26. 26

    クロスプラットフォームのC ++タッチマネージャーを作成します。C ++関連コードでObjective-cオブジェクトを渡す

  27. 27

    Objective-CからSwift 4クラスにアクセスできない:「タイプのオブジェクトにプロパティが見つかりません」

  28. 28

    Objective-CからSwift 4クラスにアクセスできない:「タイプのオブジェクトにプロパティが見つかりません」

  29. 29

    Objective-C addObject はオブジェクトをすべての配列インデックスに入れるようです

ホットタグ

アーカイブ