问题
In Swift I can give a variable a value using an anonymous closure:
let thumbnailImageView: UIImageView = {
let imageView = UIImageView()
imageView.backGroundColor = UIColor.blueColor()
return imageView;
}
addSubView(thumbnailImageView)
thumbnailImageView.frame = CGRectMake(0,0,100,100)
I am trying to do the same in Obj-C, but this results in an error when adding the subview and setting its frame:
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);
回答1:
You're trying to write in Objective-C with Swift syntax. The Swift example describes a lazily initialized variable, while Objective-C one declares a simple block that returns UIImageView. You'd need to call the block with
[self addSubview:thumbnailImageView()];
However, in this case using the block to initialize a variable makes little sense. If you're looking for lazily initialized properties, it would look like this in Objective-C
@interface YourClass : Superclass
@property (nonatomic, strong) UIImageView* imageView;
@end
@synthesize imageView = _imageView;
- (UIImageView*)imageView
{
if (!_imageView) {
// init _imageView here
}
return _imageView;
}
来源:https://stackoverflow.com/questions/45941619/assigning-a-variable-value-from-an-objective-c-block