Tôi đang làm việc với API dựa trên khối và tình cờ gặp một tình huống mà tôi đã chuyển trong tham số chặn có chữ ký không khớp với thông số đã nhập phương pháp được mong đợi. Trước sự ngạc nhiên của tôi, trình biên dịch dường như không quan tâm đến điều này và ứng dụng không gặp sự cố. Đây có phải là hành vi mong đợi không? Ví dụ:Truyền tham số chặn không khớp với chữ ký
typedef void(^MyBlock)();
typedef void(^MyBlockWithParam)(id param);
- (void)doWork {
MyBlockWithParam block1 = ^(id param) {
NSLog(@"block1: %@", param);
};
MyBlock block2 = ^{
NSLog(@"block2");
};
[self loadData:block1];
[self loadData:block2];
}
- (void)loadData:(MyBlockWithParam)block {
block(@"foo");
}
Tôi nghĩ nếu bạn thay đổi người đầu tiên thành 'void (^ MyBlockType) (void)', bạn sẽ nhận được đơn khiếu nại. Các '()' trống rỗng có nghĩa là arg không xác định tôi tin. – nielsbot
Vâng, điều đó làm cho trình biên dịch phàn nàn về nó sau đó. Bạn có biết nếu đó là tài liệu một số nơi (tôi đã không nhìn thấy nó nếu có)? Nếu bạn muốn đăng bình luận của bạn như là câu trả lời tôi sẽ chấp nhận nó. Cảm ơn – chinabuffet
Không chắc chắn - Tôi đã nhận được thông tin này từ câu trả lời khác về một câu hỏi khác :) Hãy để tôi xem. – nielsbot