Tôi muốn viết một hàm hoặc một chỉ thị giống như NSLog() có bất kỳ loại biến, nguyên thủy và đối tượng nào. Trong hàm đó tôi muốn phân biệt chúng.Mục tiêu-C: Cách kiểm tra xem biến có phải là một đối tượng hay không, cấu trúc hoặc nguyên mẫu khác
tôi biết làm thế nào nó hoạt động cho các đối tượng:
- (void)test:(id)object {
if ([object isKindOfClass:[NSString class]])
...
nhưng làm thế nào để phân biệt các đối tượng từ cấu trúc hoặc thậm chí số nguyên hoặc nổi. Giống như:
"isKindOfStruct:CGRect" or "isInt"
chẳng hạn?
Điều này có khả thi không? Tôi nghĩ vì bạn có thể gửi tất cả mọi thứ cho NSLog (@ "...", các đối tượng, ints, cấu trúc) nó phải có thể?
Cảm ơn bạn đã trợ giúp!
EDIT
Mục tiêu cuối cùng của tôi là triển khai một số loại đa hình.
Tôi muốn để có thể gọi hàm của tôi:
MY_FUNCTION(int)
MY_FUNCTION(CGRect)
MY_FUNCTION(NSString *)
...
or [self MYFUNCTION:int]...
và trong MY_FUNCTION
-(void)MYFUNCTION:(???)value {
if ([value isKindOf:int])
...
else if ([value isKindOf:CGRect])
...
else if ([value isKindOfClass:[NSString class]])
...
}
Tôi biết rằng isKindOf không tồn tại và thậm chí bạn không thể thực hiện phương pháp này trên nguyên thủy . Tôi cũng không chắc về "???" loại chung của "giá trị" trong tiêu đề hàm.
Điều đó có khả thi không?
isKindOf không tồn tại. isKindOfClass kiểm tra nếu một lớp là một thành viên hoặc phân lớp, và isMemberOfClass sẽ kiểm tra xem một lớp có * chính xác * một loại lớp hay không. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html –