如何在Objective-C中使用存储的属性

时间:2017-05-29 22:54:50

标签: ios objective-c swift

我是Objective-C的新手,我来自Swift,我可以声明一个视图

var container_view: UIView = {
    var v = UIView()
    v.backgroundColor = .white
    return v
}()

但是在Objective-c这里无论如何我可以在我的头文件或.m文件中实现这个是试过的

-(UILabel *) laf {
   UILabel *u = [[UILabel alloc] init];
   u.text = @"Label here";
   u.translatesAutoresizingMaskIntoConstraints = NO;
   return u;
};

1 个答案:

答案 0 :(得分:3)

您的Swift属性是一个存储属性,初始值计算一次。

Objective-C没有这样的功能。虽然您可以使用正确的代码进行模拟。

首先,您需要声明属性:

@property (nonatomic, strong) UIView *containerView;

如果它是公开的那么把它放在.h中。如果它是私有的,请将它放在类扩展中。

要提供(惰性)默认值,您需要覆盖getter方法:

- (UIView *)containerView {
    if (_containerView == nil) {
        UIView *v = [[UIView alloc] init];
        v.backgroundColor = [UIColor whiteColor];
        _containerView = v
    }

    return _containerView
}

如果有可能从多个主要队列访问此属性,最好使用dispatch_once而不是if