我将此Objective-C项目(TSCurrencyTextField)转换为Swift。它是格式化为接受货币值的UITextField
子类。 This是我试图转换的.m
文件。覆盖UITextField委托方法
其中,UITextField
的方法shouldChangeCharactersInRange
被TSCurrencyTextField
类型的参数覆盖。像这样(看最后一种方法),
@interface TSCurrencyTextFieldDelegate : NSObject <UITextFieldDelegate>
@property (weak, nonatomic) id<UITextFieldDelegate> delegate;
@end
@implementation TSCurrencyTextField
{
TSCurrencyTextFieldDelegate* _currencyTextFieldDelegate;
}
- (id) initWithFrame: (CGRect) frame
{
self = [super initWithFrame: frame];
if (self)
{
[self TSCurrencyTextField_commonInit];
}
return self;
}
- (void) TSCurrencyTextField_commonInit
{
// ...
_currencyTextFieldDelegate = [TSCurrencyTextFieldDelegate new];
[super setDelegate: _currencyTextFieldDelegate];
}
- (void) setDelegate:(id<UITextFieldDelegate>)delegate
{
_currencyTextFieldDelegate.delegate = delegate;
}
- (id<UITextFieldDelegate>) delegate
{
return _currencyTextFieldDelegate.delegate;
}
@end
@implementation TSCurrencyTextFieldDelegate
- (BOOL) textField: (TSCurrencyTextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string
{
// ...
}
@end
这是我的Swift转换。
protocol CurrencyTextFieldDelegate: NSObjectProtocol, UITextFieldDelegate {
weak var delegate: UITextFieldDelegate? { get set }
}
public class CurrencyTextField: UITextField {
override public var delegate: UITextFieldDelegate? {
get {
return self.delegate as? CurrencyTextFieldDelegate
}
set {
self.delegate = newValue
}
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
private func commonInit() {
}
}
// MARK: - CurrencyTextFieldDelegate
extension CurrencyTextField: CurrencyTextFieldDelegate {
public func textField(textField: CurrencyTextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return false
}
}
但我得到以下错误。
Objective-C的方法 '文本字段:shouldChangeCharactersInRange:replacementString:' 冲突带有可选要求方法 “文本字段(:shouldChangeCharactersInRange:replacementString通过方法 '::shouldChangeCharactersInRange replacementString :)文本字段(' 提供 :)'in protocol'UITextFieldDelegate'
如何解决这个错误?