在Swift中我会这样做以在一种闭包中创建一个UIView(我认为这是一个闭包),我怎样才能在Objective-C中做同样的事情呢? 我不想在ViewDidLoad()中设置所有变量和类似的东西。 谢谢你的帮助。
let myView: UIView = {
let view = UIView()
view.layer.masksToBounds = true
view.layer.cornerRadius = 5
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
答案 0 :(得分:4)
如果不在init
或viewDidLoad
中进行,则距离最近的是懒惰的实例化。
@interface SomeClass: NSObject
@property (nonatomic, strong) UIView *myView;
@end
@implementation SomeClass
- (UIView *)myView
{
if (!_myView) {
_myView = [[UIView alloc] init];
_myView.layer.masksToBounds = YES;
_myView.layer.cornerRadius = 5;
_myView.translatesAutoresizingMaskIntoConstraints = NO;
}
return _myView;
}
@end
答案 1 :(得分:2)
您可以在Objective-C中创建几乎相同的代码:
- (void)viewDidLoad {
[super viewDidLoad];
UIView *myView = ^UIView*() {
UIView *view = [[UIView alloc] initWithFrame: CGRectZero];
view.layer.masksToBounds = TRUE;
view.layer.cornerRadius = 5;
view.translatesAutoresizingMaskIntoConstraints = FALSE;
//Add constraints
return view;
}();
[self.view addSubview: myView];
}
然而,这不会像在Swift中那样创建计算变量。它只是定义一个块并调用它以初始化本地变量。