2011-12-30 7 views

Trả lời

10
id (^cacheResult)(NSString *, id(^)(void)) = ^(NSString *name, id(^block)(void)) { 
    NSObject *item = nil; 
    block(); 
    return item; 
}; 

Các khối có cú pháp tương tự với con trỏ hàm. Bạn phải khai báo tên khối sau^

3

Bạn có thể có nghĩa là id(^block)(void) trên RHS của bài tập?

10

Đây là lý do tại sao typedef được phát minh. Việc nhúng các con trỏ hàm hoặc các kiểu khối như thế này là một sự đau đớn. Hãy thử thay vào đó:

typedef id (^ InnerBlock)(void); 
typedef id (^ OuterBlock)(NSString *, InnerBlock); 

Nó sẽ làm việc với các loại khối dễ đọc hơn nhiều. :)

+0

ah, cảm ơn con trỏ (không có ý định chơi chữ). Tôi tìm thấy khối định nghĩa thực sự khó đọc đôi khi và typedef thực sự là giải pháp hoàn hảo! Mặc dù lỗi cụ thể của tôi là sự hiểu lầm nơi đặt tên biến khối. – Tony