【Objective-C】プロパティ属性のreadonlyがあっても値を変更できてしまうケースから学ぶsetter【Xcode10.2対応】

こういう人に向けて発信しています。
・Objective-CのreadOnlyを学んでいる人
・プロパティ属性について学んでいる人
・後回しにしてきた中級者

そもそもプロパティ属性 readonlyとは

読み取りのみ可能。そして対比としてreadwriteがあり、
こちらは読み書き可能。そういう認識だと思います。
ただし、厳密には自動でsetterを作らないというのが正しいです。

なので手動でsettterを作ってあげましょう。

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,readonly) NSString *testString;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _testString = @"text01";
    self.testString = @"text02";
}

//こちらをコメントアウト解除すれば、readOnlyで宣言しているのに書き込めてしまう。
-(void)setTestString:(NSString *)testString{
        _testString = testString;
}
@end

上記コードであればプロパティ属性でreadonlyを宣言しているにも
関わらず、setterを自前で用意しているので値を変える事ができます。

setterをコメントアウトすれば、

    self.testString = @"text02";

上記1行がエラー出てビルドできません。
当然ですね。readonlyに書き込もうとしてるので。
(setterを用意していないのに、ということです)

この記事が気に入ったらサポートをしてみませんか?