2017-11-09 18 views
0

Adding '@objc' to expose this instance method to Objective-Cで複数のエラーを一度に修正する方法はありますか? 70個のエラーは、これを1つずつ実行すると疲れてしまいました。Xcode 9または9.1の「#selector Objective-Cに公開されていない」エラー

issue navigatorで複数のエラーを選択してみましたが、一度にFixの方法は表示されません。

私が見る唯一の方法は、一度に1つのエラーを選択してFixを押すことです。これは嫌なことです。何か知っていれば助けてください。

enter image description here

答えて

1

あなたは、移行ツールを実行することをお勧めします - Xcodeで「... [編集]>スイフトカレント構文に>変換」に行くと、「推論を最小化」を選択し、「スウィフト4 @objc推論」について(私が実際に気づいていなかったのは、最近まで、マイグレーション担当者のほとんどが自動的にコンパイラ修正を適用しているということです)。

スウィフト4ターゲットで既にになっている場合は、その上でマイグレーションを実行することはできません。これを修正するには、「Swift言語バージョン」のビルド設定を「Swift 3.2」に変更し、その上でマイグレータを実行します(バージョンを4に戻す)。

Migratorが実行された後、 "Swift 3 @objc inference"ビルド設定が "On"に設定されていることがわかります。このビルド設定でプログラムをテストして、 @objcとしてマークされていないObj-Cエントリポイントに関するランタイム警告を取得し、完了したらビルド設定を「デフォルト」に変更します(in this Q&Aを参照)。

さらに、マイグレーションの後、@objcが追加された場所を自由に見てください。特定のクラスの単一の@objc extensionを使用してコードを整理すると、公開するメソッドのグループを定義できますObj-Cに送信する。 のObj-Cエクスポージャーを必要とするクラスをお探しの場合は、の互換性のあるメンバを選択し、クラス@objcMembersをマークすることができます。詳細については、this Q&Aを参照してください。

+0

ターゲットはすでにSwift 4に移動されていたので、「Swift言語バージョン」のビルド設定を「Swift 3.2」に変更して、Migratorを実行しました。 – AamirR

0

@objcMembers属性は、クラスまたは構造体全体で使用できます。 @objcMembers属性を適用するクラスを選択する必要があります。

this tutorialに従うことができます。 Apple docによると

スウィフトクラスは、Objective-Cランタイムから動作を必要とする多くの新しいメソッドやプロパティを導入し、@objcMembersは、そのクラスの宣言で属性を使用します。 @objcMembers属性をクラスに適用すると、@objc属性がすべてのObjective-C互換メンバに暗黙的に追加されます。 @objc属性を適用すると、アプリケーションのコンパイルされたサイズが増え、パフォーマンスに悪影響を与える可能性があるため、各メンバーに@objc属性を適用する必要がある場合にのみ宣言に@objcMembers属性を適用します。

関連する問題