【Swift4】ゲッター・セッターメソッドをオーバーラードする方法【Objective-C】
@property(プロパティ)のsetter(ゲッターメソッド)・getter(セッターメソッド) をoverride(オーバーライド)する方法です。
独自クラスのスーパークラスにあたるプロパティのセッター・ゲッターメソッドをオーバーライドする方法
下記ではUILabelをスーパークラスとした独自のクラス「CustomLabel」を作成しスーパークラスからあるtextプロパティのセッターメソッド 、ゲッターメソッドをオーバーライドする方法をご紹介しています。
Swift4
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let label : CustomLabel = CustomLabel()
label.frame = self.view.bounds
label.text = "ラベルです"
self.view.addSubview(label)
}
class CustomLabel: UILabel {
override var text: String? {
get {
return super.text
}
set(value) {
super.text = String(format:"カスタム + %@",value!)
}
}
}
Objective-C
#import "ViewController.h"
#import "CustomLabel.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CustomLabel *label = [[CustomLabel alloc] init];
label.frame = self.view.bounds;
label.text = @"ラベルです";
[self.view addSubview:label];
}
#import "CustomLabel.h"
@implementation CustomLabel
- (NSString *)getText {
return super.text;
}
- (void)setText:(NSString *)text {
super.text = [NSString stringWithFormat:@"カスタム + %@",text];
}
@end
このように「ラベルです」と入れただけなのに、「カスタム + 」がくっついていることがわかります。
独自クラスで作成したプロパティのセッター・ゲッターメソッドをオーバーライドする方法
上記ではカスタムクラスを作成してセッターメソッド 、ゲッターメソッドをオーバーライドしましたが、独自に作成したプロパティのセッターメソッド 、ゲッターメソッドをオーバーライドすることも可能です。
Swift4
var _text : String!
var text : String {
get {
return _text
}
set(value) {
_text = String(format:"カスタム + %@",value)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.text = "テキストです"
print(self.text)
}
Objective-C
@interface ViewController ()
@property (nonatomic) NSString *text;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.text = @"テキストです";
NSLog(@"%@",self.text);
}
- (NSString *)getText {
return _text;
}
- (void)setText:(NSString *)text {
_text = [NSString stringWithFormat:@"カスタム + %@",text];
}
こちらも、「テキストです」と入れただけなのに、「カスタム + 」がくっついていることがわかります。