В 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
Что не так с моим кодом?
UIBarItem
- person Reinhard Männer   schedule 11.12.2017isEnabled
UIBarButtonItem не работает должным образом, начиная с Xcode 9 / iOS SDK 11. Я изменил UIBarButtonItem, чтобы использовать UIButton в качестве пользовательского представления, чтобы иметь возможность использоватьisEnabled
UIButton. - person Seryozha   schedule 11.12.2017override var isEnabled: Bool {...}
, а компилятор предложилOverriding var must be as accessible as the declaration it overrides
и предложил в качестве исправления вставитьopen
. - person Reinhard Männer   schedule 11.12.2017override
в расширении, поскольку расширения не должны использоваться для переопределения чего-либо. Я бы назвал это ошибкой. - person rmaddy   schedule 11.12.2017