2015-01-30 8 views
0

Im не уверен, как заставить это работать: я думал о том, что делать с typedef, но я не могу найти много на эту тему.Несовместимый тип указателя блока инициализации float

float (^pixelsToDistance)(float, float, NSString *) = ^(float distance, float scale, NSString *conversion) 
    { 
     // Code goes here   
    } 

Im пытается вернуть значение поплавка из этой функции блока. Должен ли я использовать функцию вместо этого?

+1

Что такое «код идет здесь»? Это важная часть – newacct

+0

Это был просто комментарий, который я сделал для себя. Но @jeffamaphone помог мне понять это. Благодаря! – Gab

+0

Тип возврата выводится компилятором из возвращаемых выражений внутри блока. Если вы жалуетесь на то, что тип возвращаемого вывода выведен на то, чего вы не ожидали, нам нужно увидеть код внутри блока, чтобы понять, почему он выведен так, как он есть. – newacct

ответ

0

Вы были близки. Вы хотите:

float (^pixelsToDistance)(float, float, NSString *) = ^float(float distance, float scale, NSString *conversion) { ... }; 

Примечания типа возвращаемого после ^ на правой стороне оператора присваивания.

Как указывает комментатор, вы можете опустить тип возврата, если для компилятора ясно, что вы возвращаете из блока. Например:

float (^pixelsToDistance)(float, float, NSString *) = ^(float distance, float scale, NSString *conversion) { return 0.0f }; 
+0

Тип возврата почти не указывается при использовании блоков. Это полезно только в тех случаях, когда возвращаемое выражение внутри блока не является, очевидно, искомым типом возвращаемого значения, например. если он возвращает целочисленный литерал, не очевидно, что это float. – newacct

+0

Независимо от того, является ли «почти никогда не указанная» часть истинным или нет, без возвращаемого типа, Xcode создает ошибку в этом случае, если вы не включаете тип возврата. –

+0

Опять же, NOT TRUE, если возвращаемое выражение внутри блока имеет тип float: 'float (^ pixelsToDistance) (float, float, NSString *) =^(поплавковое расстояние, поплавковая шкала, преобразование NSString *) {return 3.14f; }; ' – newacct

Смежные вопросы