2011-09-19 20 views
20

Tờ khai +[NSPredicate predicateWithBlock:] trông như thế này: tài liệuTham số kết buộc cho khối trong predicateWithBlock: được sử dụng cho là gì?

+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block 

của Apple cho tham số thứ hai để khối, bindings, nói rằng nó là:

Từ điển biến thay thế. Từ điển phải chứa các cặp khóa-giá trị cho tất cả các biến trong bộ thu.

Tôi không thể hiểu tại sao tham số này là cần thiết - cũng như tôi không thấy thông số đó được sử dụng ở bất kỳ đâu. Tại sao nó lại ở đó?

Ngoài ra, tôi có cần phải nhìn vào bên trong bindings khi sử dụng vị từ dựa trên khối với -[NSArray filteredArrayUsingPredicate:] không?

+1

Câu trả lời ở đây với ví dụ về vị trí và cách sử dụng * tham số 'bindings' sẽ rất hữu ích! – pkamb

Trả lời

11

Xem tài liệu lớp:

Bạn cũng có thể tạo các vị từ đó bao gồm các biến, do đó vị có thể được xác định trước trước khi thay thế các giá trị cụ thể tại runtime. Trong Mac OS X v10.4, đối với các biến vị ngữ sử dụng các biến, đánh giá là một quá trình hai bước (xem biến vị ngữWithSubstitutionVariables: và evaluateWithObject :). Trong Mac OS X v10.5 trở lên, bạn có thể sử dụng assessmentWithObject: replaceVariables :, kết hợp các bước này.

Sau đó, xem predicate syntax docs.


Nếu bạn sau đó gọi evaluateWithObject:substitutionVariables:, từ điển nói sẽ được chuyển đến khối của bạn. Điều này cho phép tạo ra biến vị ngữ khá chung chung, trong đó vị từ kết quả có thể được truyền xung quanh và một ngôn ngữ thay thế nhất quán có thể được sử dụng để đánh giá.

+1

Khi bạn định nghĩa một vị từ với định dạng chuỗi, tôi có thể thấy tính hữu dụng của các biến thay thế. Nhưng tôi vẫn không hiểu các biến thay thế có thể được sử dụng như thế nào khi bạn tạo một vị từ bằng cách sử dụng 'predicateWithBlock:'. (Một ví dụ sẽ là tuyệt vời) –

+0

Ah, bây giờ tôi có thể nhìn thấy những gì bạn có ý nghĩa. Ngoài ra, là tham số kết buộc được sử dụng ở tất cả khi biến vị ngữ được tạo thành được truyền cho '- [NSArray filtersArrayUsingPredicate:]'? Tôi đoán là không. –

+1

@ChaitanyaGupta: Xem tại đây: http://www.wannabegeek.com/?p=149 –

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