Tôi cần kiểm tra xem đối tượng là loại NSString
hay UIImageView
. Làm thế nào tôi có thể thực hiện điều này? Có một số loại phương pháp "isoftype"?
Tôi cần kiểm tra xem đối tượng là loại NSString
hay UIImageView
. Làm thế nào tôi có thể thực hiện điều này? Có một số loại phương pháp "isoftype"?
Câu trả lời:
Nếu đối tượng của bạn là myObject
và bạn muốn kiểm tra xem nó có phải là NSString
mã không, mã sẽ là:
[myObject isKindOfClass:[NSString class]]
Tương tự như vậy, nếu bạn muốn kiểm tra myObject
cho một UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Bạn có thể sẽ sử dụng
- (BOOL)isKindOfClass:(Class)aClass
Đây là một phương pháp của NSObject
.
Để biết thêm thông tin kiểm tra NSObject
tài liệu.
Đây là cách bạn sử dụng này.
BOOL test = [self isKindOfClass:[SomeClass class]];
Bạn cũng có thể thử làm một cái gì đó như thế này
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
className
, nó có thể hoặc không hoạt động trên OS X, nhưng nó không có trong iOS và nó không có nghĩa là được sử dụng cho việc này. Ngoài ra, những người đó NSLog
không làm theo những gì tôi nghĩ bạn muốn nói - họ đang kiểm tra tên lớp (luôn là một chuỗi) và lớp mã hóa, thật kỳ lạ, thay vì lớp của phần tử thực tế.
NSLog(@"Is of type: %@", [element class]);
sẽ hoạt động trong iOS 7
Khi bạn muốn khác nhau giữa superClass và kế thừaClass bạn có thể sử dụng:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Sử dụng - (BOOL)isKindOfClass:(Class)aClass
trong trường hợp này sẽ dẫn đến TRUE cả hai lần vì kế thừaClass cũng là một loại superClass.
isMemberOfClass:
sẽ trở lại NO
khi giao dịch với các lớp con.
Chạy thử nghiệm đơn giản, tôi nghĩ tôi sẽ ghi lại những gì hoạt động và những gì không. Thường thì tôi thấy mọi người kiểm tra xem lớp của đối tượng là thành viên của lớp khác hay bằng với lớp khác.
Đối với dòng dưới đây, chúng tôi có một số dữ liệu được hình thành kém có thể là một NSArray
, một NSDictionary
hoặc (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Đây là những bài kiểm tra đã được thực hiện:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClass
làm việc khá tốt trong khi isMemberOfClass
không.
[object isKindOfClass:[ClassName class]]