2011-11-28 36 views
12

Cú pháp khai báo hàm C trả về khối Objective-C là gì? Có thể không?Trả về khối Objective-C từ hàm C

Tôi nghĩ rằng nó nên được một cái gì đó giống như

(void (^)(void)) myFunctionReturningABlock(); 

nhưng điều đó sẽ không biên dịch.

+1

Khi bạn nói không làm việc, bạn có thể xây dựng một chút ? Liệu nó có bị hỏng khi chạy hay nó tạo ra một lỗi biên dịch hay cảnh báo? Hãy cho chúng tôi biết những gì "không hoạt động" có nghĩa là và chúng tôi có thể giúp bạn thêm. – Jasarien

+1

có thể trùng lặp của [Loại khối đối tượng-C dưới dạng giá trị trả lại] (http://stackoverflow.com/questions/3948173/objective-c-block-type-as-return-value) – Ferruccio

+0

@Jasarien Xin lỗi, tôi nhận được lười biếng. Đã sửa. –

Trả lời

15

Cú pháp cho hàm của bạn hơi không chính xác.

Theo tôi được biết, bạn nên xác định khối của bạn như là một loại mà bạn có thể sử dụng như là kiểu trả về cho chức năng của bạn như thế này:

typedef void(^MyAwesomeBlock)(void); 

MyAwesomeBlock blockFunction() 
{ 
    MyAwesomeBlock block = ^{ 
     //some code; 
    }; 

    return block; 
} 
+0

Cảm ơn, hoạt động hoàn hảo. Tôi cũng đã thử phiên bản 'typedef-less' trong bản sao có thể liên kết, nhưng có một typedef làm cho nó rõ ràng hơn nhiều. –

+0

Có phiên bản typedef ít hơn không? – nielsbot

+0

@nielsbot nếu bạn đọc nhận xét ngay phía trên của bạn, bạn sẽ nhận thấy rằng Nick đề cập đến một typedef-ít liên kết trong một bình luận về câu hỏi, tiếp tục lên trang. Nhưng như Nick nói, bằng cách sử dụng một typedef làm cho mã dễ đọc hơn nhiều - bạn thường không muốn một phiên bản typedef, trừ khi bạn muốn mã lộn xộn không đọc được ?? :/ – Jasarien

Các vấn đề liên quan