web-dev-qa-db-ja.com

Swift 4 "このクラスはキー値コーディングに準拠していません"

NSObjectからのobj.valueForKey()に大きく依存しているSwiftライブラリがあります。

Swift 4に移行した後、これらの呼び出しは、「このクラスはキーのキー値コーディングに準拠していません...」というエラーで常にクラッシュすることがわかりました。 forは@objcで宣言されます。

このメソッドでプロパティを見つけるには、@objcでプロパティを宣言する必要がありますか?代替手段はありますか?

24
user1537360

移行を実行したときに、Xcodeは@objc推論について尋ね、おそらくSwift3の代わりに新しいタイプを選択しました。

可能な解決策:

@objcを使用

クラス全体ではなく、必要に応じて、各メソッドで@objcを使用します。

@objcMembersを使用

クラスで@objcMembersを使用できます。

@objcMembers属性をクラスに適用すると、そのすべてのObjective-C互換メンバーに暗黙的に@objc属性が追加されます。

Writing Swift Objective-C動作のクラスとプロトコル

注意してください:@ objc属性を適用すると、アプリのコンパイル済みサイズが大きくなり、パフォーマンスに悪影響を与える可能性があるため、各メンバーの宣言で@objcMembers属性のみを適用します@objc属性を適用する必要があります

推論を古い動作に切り替える

以下のプロジェクトの動作を変更することもできます:Build Settings> Swift 3 @objc Inference> On/Off

関連する質問:

59
nathan