2015-09-26 73 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); 

HTH