Tôi đã nhìn thấy một vài ví dụ xung quanh bằng cách sử dụng NSArray indexOfObjectPassingTest, nhưng tôi không thể làm cho chúng hoạt động (chúng sẽ không trả về một chỉ mục hợp lệ). Vì vậy, bây giờ tôi đang cố gắng sử dụng một khối nội tuyến. Tôi đã thực hiện nó bằng cách gõ một khối, sau đó thiết lập nó như là một thuộc tính, tổng hợp nó, và khởi tạo nó trong constructor. Tuy nhiên, loại đó làm cho toàn bộ điểm bị tắt tiếng, vì tôi có thể dễ dàng tạo ra một phương thức và sử dụng nó thay thế (ít đánh máy hơn, ít nỗ lực hơn).Tìm kiếm một chỉ mục đối tượng trong NSArray bằng cách sử dụng một khối nội tuyến
Những gì tôi đang cố gắng để đạt được là cái gì đó dọc này:
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex: ^NSInteger (NSString *keyword){
for (Observations *obs in self.myAppointment.OBSERVATIONS) {
if ([obs.TIME isEqualToString:keyword] == YES) return (NSInteger)[self.myAppointment.OBSERVATIONS indexOfObject:obs];
}
return (NSInteger)-1;
}];
Tuy nhiên Xcode chỉ đơn giản là sẽ không có nó. Tôi đã cố gắng biến thể khác nhau, nhưng tuyên bố nó inline có vẻ là một vấn đề, đó là lạ, bởi vì như tôi đã nói, nó typedefing, tuyên bố, và tổng hợp nó hoạt động như thế này:
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex:findObs(keyword)];
đâu findObs là một lần nữa một khối được xác định làm điều tương tự. Đây có phải là vấn đề về cú pháp hay không, tôi có thiếu cái gì khác quan trọng hơn không?
Cảm ơn mà làm việc tuyệt vời. Vì vậy, tôi lấy nó mà đi qua một khối nội tuyến như một tham số NSInteger (về cơ bản hy vọng giá trị trả về của khối được thông qua như tham số) là không thể làm được, trừ khi loại của nó được xác định và tổng hợp? –
Bạn cũng có thể gọi khối nội tuyến của bạn: '[... objectAtIndex: (^ NSInteger (NSString * k) {...}) (từ khoá)];', nhưng mọi thứ bắt đầu hơi lộn xộn một chút. –
Ví dụ này sẽ trả về đối tượng cuối cùng vượt qua thử nghiệm trong mảng. Để dừng lặp lại ngay khi tìm thấy đối tượng đầu tiên, bạn phải đặt '* stop' thành' YES' – Moose