2017-03-07 6 views
1

Swiftでは、これは閉鎖型のUIViewを作成するために行います(これはクロージャーです)。 -C? ViewDidLoad()ですべての変数とそのようなものを設定する必要はありません。 ご協力いただきありがとうございます。Objective-CでUIViewをプログラムで作成し、クロージャーに入れます

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

答えて

3

あなたがinitまたはviewDidLoadでそれを行うことなく得ることができる最も近い怠惰なインスタンス化したものです。それはスウィフトでないように計算された変数を作成することはありませんが

- (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]; 
} 

を、:

@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

私はブロック内のオブジェクトをインスタンス化し、ブロックの結果としてオブジェクトを返す方法を示しましたが、あなたの答えはおそらく、OPが鉱山よりも求めていた**本当の**質問に近いでしょう。 (不動産の遅延インスタンス化)。 –

+0

私はそれをどのように呼び出すことができますか?(私は客観的なcのnoobです) – TBDevOfWorldOfSwIFT

+0

これは 'self.myView'です。 – keithbhunter

1

あなたはObjective-Cでほぼ同じコードを作成することができます。ただブロックを定義し、ローカル変数を初期化するためにそれを呼び出します。

関連する問題