/ / Właściwość „isEnabled” UIBarButtonItem jest nierozpoznanym selektorem w rozszerzeniu klasy - swift, override, unrecognized-selector, extensions-class

Właściwość "isEnabled" z UIBarButtonItem jest nierozpoznanym selektorem w rozszerzeniu klasy - swift, override, nierozpoznany selektor, class-extensions

W Swift 4 chcę użyć rozbudowa z UIBarButtonItem tworzy instancję specjalną UIBarButtonItem obiekt.
Oto mój kod (tylko podstawowe stwierdzenia):

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

To rozszerzenie buduje się bez problemów.

Jednak po uruchomieniu aplikacji pojawia się błąd wykonania w instrukcji
self.init(customView: staticView).
Dziennik mówi:

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

Co jest nie tak z moim kodem?

Odpowiedzi:

0 dla odpowiedzi № 1

Rozszerzenia nie powinny być używane do nadpisywania istniejących funkcji. Rozszerzenia mają być używane tylko do dodawania nowych funkcji.

W rozdziale Rozszerzenia w książce Swift:

„Rozszerzenia mogą dodawać nowe funkcje do typu, ale nie mogą zastępować istniejących funkcji”.

Więc właściwym rozwiązaniem jest podklasa UIBarButtonItem jeśli chcesz zastąpić istniejącą funkcjonalność. Następnie użyj podklasy, gdziekolwiek jej potrzebujesz.