self.property = self.property in objective c

Chr*_*ris 0 properties class objective-c ios

早上好,我正在通过目标c在线查看一些旧代码,我无法找到以下内容.

该类是子类UIView,并遵循UIScrollViewDelegate协议.以下是我有一些问题的类方法:

@property(nonatomic, strong) NSDate * _Nonnull date;

- (void)layoutSubviews {
    [super layoutSubviews];

    if(!self.pagingView) {
        UIScrollView *pagingView = [[UIScrollView alloc] initWithFrame:self.bounds];
        pagingView.pagingEnabled = YES;
        pagingView.directionalLockEnabled = YES;
        pagingView.delegate = self;
        [pagingView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
        [self addSubview:pagingView];
        self.pagingView = pagingView;
    }

    CGRect f = self.pagingView.bounds;
    CGSize s = self.pagingView.contentSize;
    if(s.width != f.size.width * 3) {
        self.date = self.date;
        }
}
Run Code Online (Sandbox Code Playgroud)

首先,我不确定这[super layoutSubviews]是什么,我不确定self.date = self.date是做什么的.它只是自己设置?如果是这样,我无法使用swift工作.(我正在尝试将代码转换为)

https://github.com/Daij-Djan/DDCalendarView/blob/master/DDCalendarView_objc/DDCalendarView.m

再次感谢任何帮助;

And*_*sen 5

在Objective-C中,点符号是属性访问器方法调用的简写(语法糖).您发布的内容可以改写为:

if width != size.width * 3 {
    [self setDate:[self date]];
}
Run Code Online (Sandbox Code Playgroud)

换句话说,date属性的当前值将被传递回date属性setter.在典型的代码中,这不会真正做任何事情.如果没有看到日期设置器(和/或getter)方法的实现,就不可能说出为什么你正在看的代码正在这样做.但是,我的猜测是日期设置器有一个副作用,只要它被调用就会被触发,所以这是一种触发副作用而不改变属性值的便捷​​方法.

假设是这种情况,我想补充说这不是很好的代码.在非常至少,应该有一个注释解释这是什么做的.更好的方法是打破其自身方法中发生的任何副作用,以便即使在不应更改属性值的情况下也可以显式调用它而不是依赖日期设置器.