2015-09-26 3 views
-3

Мой вопрос действительно прямолинейный. Когда вы возвращаете блок из метода или функции или блокируете себя, как вы передаете этот возвращаемый блок из такой переменной, которая принимает этот возвращенный блок?Как использовать возвращаемый блок из метода или функции?

+1

Вы ищете как вернуть блок из метода? – Abhinav

+0

В этой теме есть хорошее объяснение http://stackoverflow.com/questions/13193673/how-do-i-create-an-objective-c-method-that-return-a-block – Abhinav

+0

@Abhinav Нет, я искал как получить возвращаемый блок из метода или функции или заблокировать его. Как вы получите возвращаемый блок? Но я понимаю, где находится путаница. –

ответ

0

Вот один из способов:

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); 
+0

есть ли другой способ сделать это? –

+1

Я не уверен, что именно вы пытаетесь сделать. Синтаксис должен быть таким же, как я показал его здесь, хотя тип вашего блока, вероятно, будет другим. – sbooth

0

Прежде всего объявить синтаксис блока.

напишите ниже синтаксис внизу #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); 
}]; 
+0

Я искал, как получить возвращаемый блок от метода или функции или заблокировать его. Как вы получите возвращаемый блок? Но я понимаю, где находится путаница. –

1

Мой вопрос действительно прямо вперед. Когда вы возвращаете блок из метода или функции или блокируете себя, как вы передаете этот возвращаемый блок из такой переменной, которая принимает этот возвращенный блок?

Как вы передаете это возвращаемое значение для любого типа ценности?

Задание.

Нет ничего особенного в возврате блока, это просто значение - в этом случае значение указателя для объекта блока - и оно возвращается и назначается переменной точно так же, как и любое другое значение. Если возвращаемое значение имеет, скажем, double, сохраните его в переменной того же типа; если возвращаемое значение является некоторым типом блока, то вы храните его в переменной с тем же типом блока.

Как и любой тип с объявлением умеренно сложного типа, вам, вероятно, будет легче сначала использовать typedef, чтобы дать ему хорошее короткое имя. Например .:

typedef int (^SomeIntFunction)(int, int) 

SomeIntFunction selectFunction() { ... } 

SomeIntFunction sif = selectFunction(); 

int result = sif(42, 24); 

НТН

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

  • Нет связанных вопросов^_^