/ / UIBarButtonItemのプロパティ「isEnabled」は、クラスの拡張機能で認識されないセレクターです。swift、override、unrecognized-selector、class-extensions

UIBarButtonItemのプロパティ "isEnabled"は、クラスの拡張子である認識不能なセレクタです(swift、override、unrecognized-selector、class-extensions)。

Swift 4では、使用したい 拡張UIBarButtonItem 特別なインスタンス化 UIBarButtonItem オブジェクト。
ここに私のコードがあります(必須ステートメントのみ):

import Foundation

extension UIBarButtonItem {

convenience init(staticImageName: String) {
let staticView = UIImageView.init(image: UIImage(named: staticImageName))
self.init(customView: staticView)
//      further code…
}

override open var isEnabled: Bool {
didSet {
print("didSet called") // Should be replaced by other code…
}
}

} // extension UIBarButtonItem

この拡張機能は問題なくビルドされます。

ただし、アプリを実行すると、ステートメントでランタイムエラーが発生します
self.init(customView: staticView).
ログには次のように書かれています:

-[UIBarButtonItem isEnabled]: unrecognized selector sent to instance 0x7fe20c505180

私のコードで何が間違っていますか?

回答:

回答№1は0

拡張機能を使用して既存の機能をオーバーライドすることは想定されていません。拡張機能は、新しい機能を追加するためにのみ使用されることになっています。

Swiftブックの拡張機能の章の場合:

「拡張機能は新しい機能を型に追加できますが、既存の機能を上書きすることはできません。」

したがって、適切な解決策はサブクラス化することです UIBarButtonItem 既存の機能をオーバーライドする場合。次に、必要な場所でサブクラスを使用します。