2017-03-07 34 views
1

在斯威夫特我想这样做是为了创造一种封闭的一个UIView(我认为这是一个封闭的),我怎么能在客观做到这一点同样的事情-C? 我不想设置所有的变量之类的东西,在viewDidLoad中()。 感谢您的帮助。在Objective-C创建UIViews编程,并提出,在一个封闭

let myView: UIView = { 
let view = UIView() 
view.layer.masksToBounds = true 
view.layer.cornerRadius = 5 
view.translatesAutoresizingMaskIntoConstraints = false 
return view 
}() 

回答

3

你可以没有initviewDidLoad做它最接近的是懒惰的实例化。

@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 
+0

我展示了如何在一个块实例化一个对象,并返回对象为块的结果,但你的答案很可能是更接近真正的** **问题的任择议定书问比我的。 (属性的懒惰实例。)投票。 –

+0

我怎么能打电话吗?(我在Objective C的一个小白) – TBDevOfWorldOfSwIFT

+0

要调用它只是'self.myView'。 – keithbhunter

1

您可以在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]; 
} 

然而,就像它在雨燕的确不会创建一个计算的变量。它只是定义了一个块,以初始化本地变量调用它。