typedef (void (^blockType)());
Objective-C отливать тип блока в другой получил неожиданный результат
мне нужно отливать блоки с различными типами аргументов в тот же тип blockType
и вызывать его как позже тип оригинала. Но есть проблема при выборе типа блокировки.
Следующий код работает хорошо с любым типом аргумента, ...
((blockType)^(BOOL b) {
NSLog(@"BOOL: %d", b);
})(YES); // >> BOOL: 1
((blockType)^(int i) {
NSLog(@"int: %d", i);
})(1); // >> int: 1
((blockType)^(double f) {
NSLog(@"double: %f", f);
})(1.0/3); // >> double: 0.333333
((blockType)^(NSString *s) {
NSLog(@"NSString *: %@", @"string");
})(1.0/3); // >> NSString *: string
кроме поплавка:
((blockType)^(float f) {
NSLog(@"float: %f", f);
})(1.0f); // >> float: 0.000000
((blockType)^(float f) {
NSLog(@"float: %f", f);
})(1.0f/3); // >> float: 36893488147419103232.000000
, но это нормально, без литья:
(^(float f) {
NSLog(@"float without casting: %f", f);
})(1.0/3); // >> float without casting: 0.333333
как его объяснить и решить?
Как его решить? Не делайте этого :) – jtbandes
@jtbandes Вы правы :( – iwill