Ошибка компиляции на блоках с типом возврата - PullRequest
2 голосов
/ 19 января 2012

У меня есть следующий код блока

    typedef BOOL(^FieldValidationBlock)(NSString *);
FieldValidationBlock aBlock = ^(NSString *input){
    return ([input length] == 10) ;
};

, которая выдает мне ошибку компиляции, которая возвращает тип возвращаемого значения int и должен быть BOOL. когда я добавляю актерский состав, он отлично работает:

    typedef BOOL(^FieldValidationBlock)(NSString *);
FieldValidationBlock aBlock = ^(NSString *input){
    return (BOOL)([input length] == 10) ;
};

почему это произошло?

1 Ответ

1 голос
/ 19 января 2012

Поскольку BOOL является целевым типом C, а операторы логического сравнения являются стандартными C. В стандарте C возвращаемый тип операторов сравнения - int. Это важно знать иногда, например, когда вы отрицаете значение, которое вы предполагаете быть логическим, но на самом деле оно представляет собой int, оно не обязательно будет тем, что вы ожидаете.

В вашем примере приведение к BOOL - это хорошо.

...