Cách tốt nhất để kiểm tra xem NSArray có chứa đối tượng của một loại lớp nhất định không? containsObject:
dường như kiểm tra sự bình đẳng, trong khi tôi đang tìm kiếm isKindOfClass:
kiểm tra bình đẳng.Cách kiểm tra xem NSArray có chứa đối tượng của một lớp cụ thể không?
Trả lời
Bạn có thể sử dụng các khối dựa liệt kê để làm điều này là tốt.
// This will eventually contain the index of the object.
// Initialize it to NSNotFound so you can check the results after the block has run.
__block NSInteger foundIndex = NSNotFound;
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[MyClass class]]) {
foundIndex = idx;
// stop the enumeration
*stop = YES;
}
}];
if (foundIndex != NSNotFound) {
// You've found the first object of that class in the array
}
Nếu bạn có nhiều đối tượng thuộc loại lớp này trong mảng của mình, bạn sẽ phải chỉnh sửa ví dụ một chút, nhưng điều này sẽ cho bạn biết bạn có thể làm gì.
Lợi thế của việc liệt kê nhanh hơn này là nó cho phép bạn cũng trả về chỉ mục của đối tượng. Ngoài ra nếu bạn đã sử dụng enumerateObjectsWithOptions:usingBlock:
, bạn có thể đặt các tùy chọn để tìm kiếm đồng thời, do đó bạn sẽ nhận được liệt kê luồng miễn phí hoặc chọn tìm kiếm mảng ngược lại hay không.
API dựa trên khối linh hoạt hơn. Mặc dù chúng trông mới và phức tạp, chúng rất dễ nhận khi bạn bắt đầu sử dụng chúng - và sau đó bạn bắt đầu thấy cơ hội sử dụng chúng ở mọi nơi.
Bạn có thể sử dụng liệt kê nhanh để lặp qua mảng và kiểm tra các lớp:
BOOL containsClass = NO;
for (id object in array) {
if ([object isKindOfClass:[MyClass class]]) {
containsClass = YES;
break;
}
}
Bạn có thể thực hiện việc này bằng NSPredicate.
NSPredicate *p = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@",
[NSNumber class]];
NSArray *filtered = [identifiers filteredArrayUsingPredicate:p];
NSAssert(filtered.count == identifiers.count,
@"Identifiers can only contain NSNumbers.");
- 1. Kiểm tra xem thể hiện NSString có được chứa trong một NSArray
- 2. Kiểm tra xem danh sách đỉnh có chứa đối tượng
- 3. Để kiểm tra xem chuỗi có chứa từ cụ thể
- 4. Kiểm tra xem một đối tượng có phải là một thể hiện của một lớp cụ thể hoặc của một phân lớp của nó
- 5. Trong Java, làm thế nào tôi có thể kiểm tra xem một bộ sưu tập có chứa một cá thể của một lớp cụ thể không?
- 6. Làm cách nào để kiểm tra xem đối tượng có thuộc loại cụ thể không?
- 7. Cách kiểm tra xem tệp có chứa chuỗi cụ thể không bằng cách sử dụng bash
- 8. jQuery: Kiểm tra xem đối tượng có lớp
- 9. kiểm tra xem std :: vector có chứa một đối tượng nhất định không?
- 10. Làm thế nào tôi có thể kiểm tra xem một NSString cụ thể có mặt trong NSArray không?
- 11. Java: Cách kiểm tra xem đối tượng có rỗng không?
- 12. Có thể lọc NSArray theo lớp không?
- 13. Kiểm tra xem một đối tượng là một NSArray hoặc NSDictionary
- 14. Làm cách nào để kiểm tra xem đối tượng có chứa mảng byte không?
- 15. Có thể, trong một mẫu django, để kiểm tra xem một đối tượng có được chứa trong danh sách
- 16. Làm cách nào để kiểm tra xem một đối tượng trò chơi có thể nhìn thấy đối tượng khác không?
- 17. Làm cách nào để kiểm tra xem chúng tôi có thể truyền một đối tượng sang một đối tượng khác
- 18. Làm cách nào để kiểm tra xem một đối tượng datetime cụ thể có "giữa" hai datetimes không?
- 19. Kiểm tra xem Danh sách đối tượng có chứa đối tượng có giá trị thuộc tính nhất định không
- 20. Kiểm tra xem có phải là một đối tượng
- 21. Cách kiểm tra xem một mảng có chứa một giá trị cụ thể trong Scala 2.8 không?
- 22. Làm cách nào để kiểm tra xem một mảng có chứa một giá trị cụ thể trong php không?
- 23. Cách kiểm tra xem chuỗi có chứa chỉ các ký tự cụ thể
- 24. ios kiểm tra xem NSArray == null
- 25. NSPredicate kiểm tra NSArray nếu đối tượng có một số ID
- 26. Kiểm tra xem một đối tượng có tồn tại
- 27. Kiểm tra xem một thể hiện của một đối tượng là chỉ đọc
- 28. Cách kiểm tra xem địa chỉ IP có nằm trong một mạng con cụ thể không
- 29. Javascript - kiểm tra xem div có chứa một từ không?
- 30. Cách kiểm tra xem đối tượng có phải là một mảng của một loại nhất định
Lợi thế khi sử dụng phương pháp dựa trên khối, ngoài việc có thể chỉ định biến để ngừng liệt kê là gì? – futureelite7
Tôi sẽ sử dụng NSNotFound thay vì -1. – NSResponder
@NSResponder - Tốt bắt - cảm ơn. – Abizern