ARC不允许将'int'隐式转换为'UILabel *'

时间:2019-03-06 06:09:59

标签: objective-c objective-c-blocks

在下面的代码中,我收到一个编译错误“不允许将'int'隐式转换为'UILabel *'。”

UILabel* (^makeLabel)(CGFloat, CGFloat, CGFloat, CGFloat, NSString*) = ^(CGFloat x, CGFloat y, CGFloat w, CGFloat h, NSString* title) {
    UILabel* label = [[UILabel alloc] init];
    label.frame = CGRectMake(x, y, w, h);
    label.text = title;
    label.font = [UIFont systemFontOfSize:14];
    return label;
};

UILabel* lblEmail = mekeLabel(30, 100, 100, 30, @"이메일");

我应该怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

您的代码中有错字。您应该致电makeLabel(30, 100, 100, 30, @"이메일");。出现此错误的原因是mekeLabel被视为稍后声明的块。默认情况下,Objective-C中的块返回int

答案 1 :(得分:0)

您需要在各处明确定义返回类型,例如:

UILabel * (^makeLabel)(CGFloat, CGFloat, CGFloat, CGFloat, NSString *) = ^UILabel *(CGFloat x, CGFloat y, CGFloat w, CGFloat h, NSString * title) {
    UILabel * label = [[UILabel alloc] init];
    label.frame = CGRectMake(x, y, w, h);
    label.text = title;
    label.font = [UIFont systemFontOfSize:14];
    return label;
};

那么这将完美地起作用:

UILabel * lblEmail = makeLabel(30, 100, 100, 30, @"이메일");