Я пытаюсь добавить поведение по умолчанию для некоторых методов UITextFieldDelegate
, используя так называемые расширения протокола:
extension ViewController: UITextFieldDelegate {
// Works if I uncommented this so I know delegates are properly set
// func textFieldShouldReturn(textField: UITextField) -> Bool {
// textField.resignFirstResponder()
// return true
// }
}
extension UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Как вы можете догадаться, клавиатура никогда не увольняется. Я не могу понять, где эта проблема. Это ограничение языка? Кто-то уже успел это сделать?
EDIT:
Как показано в @Logan, реализация метода протокола по умолчанию не работает с протоколами, отмеченными как @objc
. Однако UITextFieldDelegate
имеет следующую подпись public protocol UITextFieldDelegate : NSObjectProtocol {...}
Я тестировал реализацию по умолчанию для NSObjectProtocol
и, похоже, работает нормально:
protocol Toto: NSObjectProtocol {
func randomInt() -> Int
}
extension Toto {
func randomInt() -> Int {
return 0
}
}
class Tata: NSObject, Toto {}
let int = Tata().randomInt() // returns 0