Неявное преобразование int в UILabel * запрещено ARC - PullRequest
0 голосов
/ 06 марта 2019

Я получил ошибку компиляции "Неявное преобразование 'int' в 'UILabel *' запрещено с ARC" в коде ниже.

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 ]

1 голос
/ 06 марта 2019

В вашем коде есть опечатка. Вам следует позвонить makeLabel(30, 100, 100, 30, @"이메일");. Причина, по которой вы получаете эту ошибку, заключается в том, что mekeLabel воспринимается как блок, который объявляется позже. Блоки в Objective-C возвращают int по умолчанию.

0 голосов
/ 06 марта 2019

вам нужно везде явно указать тип возвращаемого значения, например:

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, @"이메일");
...