Мой вопрос действительно прямолинейный. Когда вы возвращаете блок из метода или функции или блокируете себя, как вы передаете этот возвращаемый блок из такой переменной, которая принимает этот возвращенный блок?Как использовать возвращаемый блок из метода или функции?
ответ
Вот один из способов:
typedef void(^blockTakingInt)(int);
// Returns a block
blockTakingInt f()
{
return ^(int i) {
printf("i = %d\n", i);
};
}
// Accepts a block as a parameter
void g(int i, blockTakingInt b)
{
b(i);
}
// Store the block returned by the function f in b, and pass it to g
void (^b)(int) = f();
g(4, b);
есть ли другой способ сделать это? –
Я не уверен, что именно вы пытаетесь сделать. Синтаксис должен быть таким же, как я показал его здесь, хотя тип вашего блока, вероятно, будет другим. – sbooth
Прежде всего объявить синтаксис блока.
напишите ниже синтаксис внизу #import ...
.
typedef void(^completionBlock) (NSString *message);
Теперь создадим функцию с блоком:
- (void)callFunctionWithBlock: (NSString *)text completion: (completionBlock)callBlock {
NSLog(@"%@", text);
callBlock([NSString stringWithFormat:@"block with return message: %@", text]);
}
Вызов вашей функции:
[self callFunctionWithBlock:@"testing block" completion:^(NSString *message) {
NSLog(@"%@", message);
}];
Я искал, как получить возвращаемый блок от метода или функции или заблокировать его. Как вы получите возвращаемый блок? Но я понимаю, где находится путаница. –
Мой вопрос действительно прямо вперед. Когда вы возвращаете блок из метода или функции или блокируете себя, как вы передаете этот возвращаемый блок из такой переменной, которая принимает этот возвращенный блок?
Как вы передаете это возвращаемое значение для любого типа ценности?
Задание.
Нет ничего особенного в возврате блока, это просто значение - в этом случае значение указателя для объекта блока - и оно возвращается и назначается переменной точно так же, как и любое другое значение. Если возвращаемое значение имеет, скажем, double
, сохраните его в переменной того же типа; если возвращаемое значение является некоторым типом блока, то вы храните его в переменной с тем же типом блока.
Как и любой тип с объявлением умеренно сложного типа, вам, вероятно, будет легче сначала использовать typedef
, чтобы дать ему хорошее короткое имя. Например .:
typedef int (^SomeIntFunction)(int, int)
SomeIntFunction selectFunction() { ... }
SomeIntFunction sif = selectFunction();
int result = sif(42, 24);
НТН
Вы ищете как вернуть блок из метода? – Abhinav
В этой теме есть хорошее объяснение http://stackoverflow.com/questions/13193673/how-do-i-create-an-objective-c-method-that-return-a-block – Abhinav
@Abhinav Нет, я искал как получить возвращаемый блок из метода или функции или заблокировать его. Как вы получите возвращаемый блок? Но я понимаю, где находится путаница. –