从 Objective-C 块中分配变量值
Assigning a variable value from an Objective-C Block
在 Swift 中,我可以使用匿名闭包为变量赋值:
let thumbnailImageView: UIImageView = {
let imageView = UIImageView()
imageView.backGroundColor = UIColor.blueColor()
return imageView;
}
addSubView(thumbnailImageView)
thumbnailImageView.frame = CGRectMake(0,0,100,100)
我试图在 Obj-C 中做同样的事情,但这会导致在添加子视图和设置其框架时出错:
UIImageView* (^thumbnailImageView)(void) = ^(void){
UIImageView *imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor blueColor];
return imageView;
};
[self addSubview:thumbnailImageView];
thumbnailImageView.frame = CGRectMake(0, 0, 100, 100);
您正在尝试使用 Swift 语法在 Objective-C 中编写。 Swift 示例描述了一个延迟初始化的变量,而 Objective-C 示例声明了一个 returns UIImageView
的简单块。您需要使用
调用该块
[self addSubview:thumbnailImageView()];
但是,在这种情况下使用块来初始化变量没有什么意义。如果您正在寻找延迟初始化的属性,它在 Objective-C
中看起来像这样
@interface YourClass : Superclass
@property (nonatomic, strong) UIImageView* imageView;
@end
@synthesize imageView = _imageView;
- (UIImageView*)imageView
{
if (!_imageView) {
// init _imageView here
}
return _imageView;
}
在 Swift 中,我可以使用匿名闭包为变量赋值:
let thumbnailImageView: UIImageView = {
let imageView = UIImageView()
imageView.backGroundColor = UIColor.blueColor()
return imageView;
}
addSubView(thumbnailImageView)
thumbnailImageView.frame = CGRectMake(0,0,100,100)
我试图在 Obj-C 中做同样的事情,但这会导致在添加子视图和设置其框架时出错:
UIImageView* (^thumbnailImageView)(void) = ^(void){
UIImageView *imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor blueColor];
return imageView;
};
[self addSubview:thumbnailImageView];
thumbnailImageView.frame = CGRectMake(0, 0, 100, 100);
您正在尝试使用 Swift 语法在 Objective-C 中编写。 Swift 示例描述了一个延迟初始化的变量,而 Objective-C 示例声明了一个 returns UIImageView
的简单块。您需要使用
[self addSubview:thumbnailImageView()];
但是,在这种情况下使用块来初始化变量没有什么意义。如果您正在寻找延迟初始化的属性,它在 Objective-C
中看起来像这样@interface YourClass : Superclass
@property (nonatomic, strong) UIImageView* imageView;
@end
@synthesize imageView = _imageView;
- (UIImageView*)imageView
{
if (!_imageView) {
// init _imageView here
}
return _imageView;
}