gpt4 book ai didi

ios - self.property = objective-c 中的 self.property

转载 作者:行者123 更新时间:2023-11-28 18:05:04 25 4
gpt4 key购买 nike

早上好,我正在在线查看 objective-c 中的一些旧代码,但我无法找出以下含义。

该类是 UIView 的子类,并遵循 UIScrollViewDelegate 协议(protocol)。以下是我有一些疑问的类方法:

@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;
}
}

首先,我不确定 [super layoutSubviews] 正在实现什么,我也不确定 self.date = self.date 正在尝试做什么。它只是 self 设定吗?如果是这样,我无法使它与 swift 一起工作。 (我正在尝试将代码转换为)

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

再次感谢您的帮助;

最佳答案

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

if width != size.width * 3 {
[self setDate:[self date]];
}

换句话说,date 属性的当前值被传递回 date 属性 setter。在典型的代码中,这实际上不会做任何事情。如果没有看到日期 setter (和/或 getter )方法的实现,就不可能说出为什么您正在查看的代码会这样做。但是,我的猜测是日期 setter 有一个副作用,它会在任何时候被调用时触发,所以这是一种无需更改属性值即可触发该副作用的便捷方法。

假设是这种情况,我想补充一点,这不是很好的代码。至少, 应该有一条注释来解释它在做什么。更好的办法是将发生的任何副作用分解到它自己的方法中,这样即使在不应更改属性值的情况下,也可以显式调用它而不是依赖日期 setter 。

关于ios - self.property = objective-c 中的 self.property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com