NSObject
からのobj.valueForKey()
に大きく依存しているSwiftライブラリがあります。
Swift 4に移行した後、これらの呼び出しは、「このクラスはキーのキー値コーディングに準拠していません...」というエラーで常にクラッシュすることがわかりました。 forは@objc
で宣言されます。
このメソッドでプロパティを見つけるには、@objc
でプロパティを宣言する必要がありますか?代替手段はありますか?
移行を実行したときに、Xcodeは@objc
推論について尋ね、おそらくSwift3の代わりに新しいタイプを選択しました。
可能な解決策:
@objc
を使用クラス全体ではなく、必要に応じて、各メソッドで@objc
を使用します。
@objcMembers
を使用クラスで@objcMembers
を使用できます。
@objcMembers属性をクラスに適用すると、そのすべてのObjective-C互換メンバーに暗黙的に@objc属性が追加されます。
注意してください:@ objc属性を適用すると、アプリのコンパイル済みサイズが大きくなり、パフォーマンスに悪影響を与える可能性があるため、各メンバーの宣言で@objcMembers属性のみを適用します@objc属性を適用する必要があります。
以下のプロジェクトの動作を変更することもできます:Build Settings
> Swift 3 @objc Inference
> On
/Off
関連する質問: